*

動画で英語を学習できる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アドセンス




関連記事

Swift入門(Xcode6のXCTestフレームワークで学ぶ) 第一回「Swiftの概要」 

Swiftの簡単な説明 アップルのiOS(iOS8以降)およびOS Xのためのプログラミング言語。

記事を読む

iOS(Xcode6とSwift)におけるマルチスレッド処理の実装方法その1[NSThreadクラスの簡単な利用例]

前回はObjective-CにおけるNSThreadクラスの簡単な利用例を取り扱いましたが今回は、ほ

記事を読む

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

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

記事を読む

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

SwiftでStringのメソッド stringByReplacingCharactersInRa

記事を読む

Jasmine(JavaScriptテスティングフレームワーク)入門【導入編】

Titanium Mobileを使ってスマホのアプリを作成しようと考えているのですが、 テスティン

記事を読む

Swift入門[公式リファレンスのチュートリアルのSteps2の後半]

「Swift入門」では、Steps2の前半まで説明させていただきました。 本エントリーでは、

記事を読む

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

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

記事を読む

Swift入門[公式リファレンスのチュートリアルのSteps2の前半]

「Swift」と「Xcode 6」を少しずつさわっていこうと思ってはいるのですが、「Xcode 6

記事を読む

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

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

記事を読む

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

iOS7開発者向けお勧め本紹介を以前に紹介させていただきまいたが、今回は同じ著者(大重美幸様)の本を

記事を読む

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 ↑