34

最終ビルドを作成してAppStoreに送信する前に、人々がどのようなプラクティスを学んだのか知りたいですか?デバッグからリリースに切り替えてNSLogへの呼び出しをコメントアウトする以外に、他にどのような基本的なものやそれほど基本的ではないものに注意する必要がありますか?

4

4 に答える 4

31

これは良い質問です。いくつかの答えを言い直して、私自身の答えをいくつか追加したいと思います。私はこの回答をコミュニティウィキにしました。自由に追加してください。

  1. デバイスからアプリを削除し、WiFiをオフにし、セルラーデータをオフにして、アプリをインストールしてテストします。それは適切に機能しますか(インターネットなしで可能な限り)?少なくとも、ネットワーク接続が必要であることをユーザーに通知しますか(必要な場合)、それともクラッシュしますか?

  2. CLLocationManagerを使用する場合:アプリを削除し、フレッシュインストールして実行しますが、アプリに位置データを許可しないでください。アプリは正常に動作しますか、それともクラッシュしますか?少なくとも、位置データなしでは実行できないことをユーザーに伝えますか(それが要件である場合)?WiFiのみを使用してすべての地理的位置を特定するiPodTouchで動作しますか?

  3. シミュレーターでアプリを実行し、ビューコントローラーごとに次の手順を実行します。(a)iPhoneシミュレーターメニューから[ハードウェア]-> [メモリ警告のシミュレーション]を選択し、(b)アプリ内を移動して他のビューコントローラーに移動します。すべてが機能しているかどうかを確認します。(c)別のViewControllerのテストを繰り返します。

  4. 古いファームウェア(iOS 3.1.3など)をサポートしている場合は、3.1.3を実行しているデバイスにアプリをインストールしてテストします(お持ちでない場合は、3.2シミュレーターを使用してください)。

  5. 通話中またはパーソナルホットスポットがアクティブなときにアプリを起動します。すべての画面レイアウトは正しいですか(ステータスバーの高さは20ではなく40pxです)?ビューの下部20pxが画面から押し出されましたか、それとも正しくサイズ変更されましたか?

  6. アプリ内で電話を受け入れると、アクティブに辞任して適切に再開しますか?通話中にアプリからの音が鳴り止みますか?

  7. 音楽の再生中にアプリを起動しますが、音楽は引き続き再生されますか?サウンドは適切にミックスされていますか、それとも音楽は適切にフェードしていますか?

  8. iPhone 3G(128MB RAM、412Mhz CPU)やiPod Touch(第1世代または第2世代)など、RAMが制限されている低速のデバイスでパフォーマンスをテストします。

  9. Clang静的アナライザーを実行し、すべての警告を修正(または少なくとも理解)します。

  10. NSZombiesEnabledが環境変数でNOであることを確認してください(注意:これがまだ問題であるかどうかわからない)

于 2011-08-11T14:47:56.017 に答える
17

いくつかのこと:

私は実際、Apple が指定する「ディストリビューション」と呼ばれるビルド構成を作成しないことをお勧めします。ベータ テスター向けにアドホック ビルドを作成することがよくあるからです。Ad Hoc と呼ばれるものと AppStore と呼ばれるものの 2 つのビルド構成を作成するので、混乱することはありません。2 つの唯一の違いは、アドホック ビルド用の Entitlements.plist ファイルが存在することです。このようにして、私は Apple に提出するものを可能な限り厳密にテストすることができます。

ほとんどの開発者は楽観主義者です。だからこそ、私たちは億万長者になることがわかっているアプリを作成するために週末に取り組んでいます. ただし、送信する前に、悲観論者になりましょう。うまくいかない可能性があることをすべて想像して、再確認してください。

何も仮定しないでください。アプリに加えた小さな小さな変更が他のものに影響を与えないと思い込まないでください。マーフィーの法則によると、この小さな変更によって、すべての iPod Touch などでアプリがクラッシュするということです。最終的なコード編集とアプリストアへの提出の間に徹底的にテスト、テスト、テストします。少し変更する必要がある場合は、完璧になるまで繰り返します。

ユーザーの 99.9% でアプリがクラッシュしない場合、1,000 回のダウンロードごとに 1 回が 1 つ星の痛烈なレビューになることを覚えておいてください。

私は開発中に Clang 静的アナライザー、Leaks、および Object Allocations を使用しますが、念のため、提出前にこれらのツールを追加で実行します。

古いデバイスを持っていない場合は、3GS のパフォーマンスが大幅に向上し、重要なパフォーマンスの問題を見逃す可能性があるため、1 つ入手してください。

ネットワークまたは場所が適用可能な場合は、次の構成でアプリをテストします。

  • iPodタッチ
  • アイフォン3G
  • iPhone 3GS
  • 機内モードのiPhone
  • Wi-Fi 搭載の iPhone
  • エッジ付きiPhone
  • アプリの使用中に電話をかける
于 2009-09-27T00:31:10.267 に答える
8

リリースに切り替える代わりに、「ディストリビューション」に切り替えます。これは Release のコピーですが、それが Apple doc とiPhoneDeveloperTipsから教えられた方法です。

重要なポイント:

最終ビルドの後、急いでアプリを圧縮する前に、Finder の [パッケージの内容を表示] を使用してバンドルを開きます。Snow Leopard より前のバージョンで私を悩ませた MacOS のバグにより (まだ存在している可能性があります)、(Finder の [圧縮] または [アーカイブ] メニュー項目を使用して) 圧縮する速度が速すぎると、一部のリソースがまだ圧縮されていません。ファイルにフラッシュされます。Show Package Contents を実行すると、内容が更新されます。この問題に気付く方法は、圧縮されたアプリのサイズが予想されるサイズの 5 分の 1 から 10 分の 1 以下になることです。「ねえ、この zip ユーティリティは本当に圧縮に優れている」と思うかもしれませんが、そうではありません。この問題は、主に「すべてクリーンアップ」を行っているため、テスト中ではなくこの時点で発生します。build と app bundle のすべてのリソースとコンテンツは空で始まり、Xcode によって埋められます。そして、何らかの理由で、Xcode がファイルの作成を完了した後でも、圧縮するとコンテンツはまだ実際には存在しませんが、それらを見ると存在します (一種の逆ハイゼンベルク)。注意してください。

私が多くの時間を費やしているもう 1 つの分野は、最新の変更をすべて SVN にコミットし、新しいブランチを作成し、ファイルにタグを付けた後、ソースの適切なバックアップを作成することです。また、バージョン番号を SVN のビルド/コミット番号と一致させたいので、リリースに一致する SVN のバージョンを常に把握しています。これらの 2 つのバージョン番号は info.plist にあり、アプリのユーザーがiを押して情報を求めたときに表示されます。たとえば、現在の info.pist には以下が含まれます。

<key>CFBundleShortVersionString</key>
<string>2.0a1</string>
<key>CFBundleVersion</key>
<string>346</string>

CFBundleVersion の使用方法にはさまざまな考えがあります。これが私のやり方です。また、コマンド ライン ユーティリティのagvtoolも便利です。

アプリがビルドされたら、圧縮後、実際には圧縮バージョンに変更を加えていないので、アプリ ファイルをチェックして、アドホック 証明書ではなく、正しい配布証明書で署名されていることを確認します。コマンド ライン ユーティリティであるcodesignの使用法を学習すると、この種のチェックとデバッグに役立ちます。最初に圧縮コピーを作成することで、Xcode から渡された最終コピーを変更しないようにし、問題がなければ itunesconnect にアップロードします。

他に覚えておくべきことは、アプリのアイコン、iTunes ストアに必要なその他のさまざまなアイコンとグラフィック、info.plist、およびアプリのアップロードが不可解なエラー メッセージで失敗した場合、通常は次のことに関係しているという事実です。これらの部分の 1 つが、作成中の圧縮ファイルに含まれていません (アプリ バンドルに含まれる部分)。

于 2009-09-26T05:42:34.900 に答える