*

動画で英語を学習できるiOSの無料アプリCapTubeをリリースいたしました。

公開日: : Swift, プログラミング ,


スポンサードリンク



個人では初となるiOSアプリをリリースいたしました。

何度もリジェクトをくらいながら、開発開始からリリースまでに3ヶ月ほどかかりました。
その経験を踏まえて、本エントリーでは、アプリのリリース時にApple様よりいただいたリジェクト事例を記載させていただきます。

まずは、アプリの紹介をさせていただきます。英語を動画で学習することができる無料アプリです。名前はCapTubeです。

・iTunes リンク
https://itunes.apple.com/jp/app/captube/id1171045056?l=ja&ls=1&mt=8

・紹介動画(Youtube)

普段から開発(Java、C#、C++、Swift、Objective-C、Ruby on Rails)でエンタープライズ向けの開発のお仕事をやっております。
技術系のブログを複数やっておりますので、コーディングには悩まないのですが、いろいろ個人でやるとなると大変ですよね・・・

1. We discovered one or more bugs in your app..on Wi-Fi connected to an IPv6

IPv6環境でナビゲーションバーのアイコンをクリックするとアプリがクラッシュするとの指摘でした。

これで4回ぐらいリジェクトをくらいました。3回目のリジェクトのあとサンノゼから携帯に電話がありました。
内容は、なぜそんな内容で電話をかけてくるのだろう??、と思うぐらいのものだったのですが、着信時は、
英語かー!?、と焦ったけど日本語での電話でしたのでとても印象に残ってます。

とリジェクトの内容から完全に逸脱していますが・・・

結論から記載させていただくと、この指摘はIPv6ネットワークとIPv4ネットワークの間に立ってNATが起こす遅延に起因するマルチスレッドの不具合でした。

10日ぐらい再現を試みたのですが、私の環境では再現せず。クラッシュダンプとにらめっこする毎日でした。
しょうがないので、あれかなー?、これかなー?、とちょこちょこ直しながら、I can’t reproduce!とのコメントを付けて審査を要求しました。

そんな状態で審査を依頼しても当然のようにリジェクトされます。
いっぱいググって、外国のディベロッパーが「Wi-Fi connected to an IPv6」の問題はIPv6が本質的な原因ではない
的な事を書いていたのを見て、これは遅延により発生頻度が跳ね上がるマルチスレッドの問題だと感じました。

その線で自分のアプリを調べていくと、スレッドが滞留していく現象が発生している事に気付きました。
マルチスレッドプログラミングなんてエンタープライズ系のシステムだとあたりまえなので、自分の書いたコードにそんな問題があるなんて気づいてませんでした。でもエンタープライズ系のiOSアプリでゴリゴリにマルチスレッドって処理ないですよね・・・

具体的な対処方法ですが、スレッドが「あ!俺終わらないといけないんだ」と認識させるようにチェックポイントを入れるといった事となります。iOSのスレッドは終了させる事ができないので、走っているスレッドが自ら気づいて止まるようにするしかないです。

上記のような修正を実施し、審査を要求するとすんなりこの指摘はクリアーできましたが、この押し問答の間に他の指摘も追加されていったんですよね・・・
この続きは次のエントリーで記載させていただきます。


スポンサードリンク

Googleアドセンス

Googleアドセンス




関連記事

no image

Androidの「Action Bar Icon Pack」を調査する。

Androidアプリケーションを作成する時にはアイコンの利用はほぼ必須です。 「Action Ba

記事を読む

Xcode6とSwiftでイメージ(画像)やアニメーションを表示する方法

本エントリーでは、Xcode6(言語はSwift)を利用してイメージ(画像)やアニメーションを表示す

記事を読む

Xcode6-Beta3でSwiftでBDDを行うためにQuickを導入し動作させる手順

Clone the repository Create a using Quick Pro

記事を読む

Xcode6-Beta2でSwiftのユニットテスト(Unit Test)をXCTestフレームワークで試してみる。

タイトルの通りですが、Xcode6-Beta2でSwiftのユニットテスト(XCTestフレームワー

記事を読む

Swift(Xcode6-Beta2)でStringのメソッド(stringByReplacingCharactersInRange:withString:)のコンパイルが通らない時の対処

SwiftでStringのメソッド stringByReplacingCharactersInRa

記事を読む

Swift入門(Xcode6のXCTestフレームワークで学ぶ) 第二回「関数(メソッド)とクロージャーの利用方法」

前回はSwiftの概要をザックリと説明させていただきました。 今回は「メソッドの宣言方法」をよ

記事を読む

iOS(Xcode6とSwift)におけるマルチスレッド(非同期)処理の実装方法その2[GCD(Grand Central Dispatch)の利用]

「iOS(Xcode6とSwift)におけるマルチスレッド処理の実装方法その1」ではNSThread

記事を読む

Xcode6とSwiftで画面コンポーネント(UIコンポーネント)を配置して利用するための基本

当然ですが、iOS向けのアプリケーションを作成するためには、 画面に画面コンポーネント(UIコンポ

記事を読む

Xcode6(Swift)のデリゲートとプロトコルの使い方

Xcode(Objective-C)のデリゲートの使い方では利用言語がObjective-Cの時のデ

記事を読む

Swift(Xcode6-Beta2)でMagicalRecord関連の処理を含んだDAOクラスのユニットテスト(UnitTest:XCTestフレームワーク)を実装する時にハマった事

SwiftでMagicalRecord関連の処理を含んだDAOクラスを作成し、ユニットテスト(XCT

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

動画で英語を学習できるiOSの無料アプリCapTubeをリリースいたしました。

個人では初となるiOSアプリをリリースいたしました。 何度もリジ

no image
Ruby on rails4系でBootstrapを利用するためのtips

MacでRuby on rails4系のBootstrapを利用しよう

no image
Java、Eclipse、JUnit関連のエントリーの移行のお知らせ

Java、Eclipse、JUnit関連のエントリーは http:/

iOS8開発者向けお勧め本紹介[詳細! Swift iPhoneアプリ開発 入門ノート Swift 1.1+Xcode 6.1+iOS 8.1対応]

iOS7開発者向けお勧め本紹介を以前に紹介させていただきまいたが、今回

Swift入門(Xcode6のXCTestフレームワークで学ぶ) 第二回「関数(メソッド)とクロージャーの利用方法」

前回はSwiftの概要をザックリと説明させていただきました。 今

→もっと見る

Optimization WordPress Plugins & Solutions by W3 EDGE
PAGE TOP ↑