Start Developing iOS Apps Today(sup.12)〜迅速なドキュメントの検索

2013. 01. 12
AppleはサンプルコードやFAQ、技術ノート、ビデオ、概念やリファレンスのドキュメントを含む、アプリを巧く構築および展開するのに役立つドキュメントを提供します。
最新かつ正確な情報は、Appleから直接必要なドキュメントのリソースを入手してください。
Xcodeはこれらのリソースへのアクセスを既に持っています。
ブラウザでの利用やiPadでのPDF表示を望む場合は、オンラインのiOS Developer Libraryで参照することができます。
いずれにせよ、提供されている様々なナビゲーションや検索技術に精通している必要があります。



●XcodeのDocumentationオーガナイザを使用したドキュメントの検索

XcodeのDocumentationオーガナイザは、デベロッパドキュメントの検索と閲覧を提供する統合された多機能なビューアです。
貴方は表示したいドキュメントセットの指定にDocumentationオーガナイザを使用します。

ドキュメントセットは鍵となるAppleの技術のリソースのコレクションです。
各セットにはオンラインのiOS Developer Libraryと同じリソースが含まれています。
デフォルトでは、利用可能になった時点でXcodeが自動的にドキュメントセットのインストールと更新を行います。
iOS開発者の場合、貴方は自動的にインストールされている2つのドキュメントセットを見つけるでしょう。

  • iOS Developer Library
    iOSアプリの記述に固有のドキュメントが含まれています。

  • Xcode Developer Library
    貴方の開発環境としてXcodeの使用に固有のドキュメントが含まれています。

XcodeでのiOSドキュメントの表示
  1. Window > Organizerを選択し、OrganizerウィンドウでDocumentationをクリックします。
    検索ナビゲータを有効にした状態でDocumentationオーガナイザが表示されます。

  2. ナビゲータセレクタバーでブラウズボタン(browse_2x.png)をクリックします。
    ドキュメントナビゲータにインストールされているデベロッパライブラリが表示されます。

  3. iOSライブラリを選択します。

ドキュメントを検索する方法の選択にはナビゲータボタンをクリックします。

  • browse_2x.png  ドキュメント階層を閲覧します。

  • NB_SearchResults-xxx_2x.png  特定の用語を検索します。

  • bookmarks_2x.png  貴方が閲覧していたドキュメントに戻るにはブックマークを使用します。

DO_FindView_2x.jpg

選択したドキュメントはコンテンツ領域にHTMLフォーマットで開きます。
ドキュメントがPDFフォーマットで提供されている場合は、関連項目メニューで選択することによってPDFバージョンを開くことができます。

コンテンツ領域のジャンプバーでは、それが含まれているドキュメントやライブラリを更に探索することができます。
ジャンプバーを使用し終わった後は、Editor > Hide Navigatorを選択することによって、コンテンツ表示領域を拡大することができます。



●オンラインでのデベロッパドキュメントの検索

希望する場合、オンラインのデベロッパライブラリを閲覧することもできます。
例えば、XcodeがインストールされていないiPadやコンピュータでドキュメントを読みたい場合などです。
iOS Developer Libraryへのアクセスは、http://developer.apple.com/library/iOSと入力する、あるいはiOS Dev CenterにログインしiOS Developer Libraryへのリンクをクリックしてください。

iOSDevLib_2x.png

またウェブサイトでPDFのドキュメントを閲覧することもできます。
ドキュメントがPDFで提供されている場合、表示されたドキュメントの右上角にPDFボタンが表示されます。
ブラウザでPDFファイルを表示するにはボタンをクリックし、ファイルをダウンロードするにはControlキーを押しながらクリックしてください。



●リソースタイプ、トピック、またはフレームワークによるドキュメントのフィルタリング

XcodeとiOS Developer Libraryのウェブインターフェイスの双方において、リソースへのナビゲートと検出を行ういくつかの方法が提供されています。
リソースタイプ、トピック、またはフレームワークによってドキュメントを表示することができます。
リソースタイプ(Resource Types)では、概念とタスクを説明するガイドや、APIの詳細を含むリファレンスドキュメント、ダウンロードができるサンプルコード、そしてAppleのエンジニアによるビデオプレゼンテーションが含まれています。
また、いくつかの技術をステップ・バイ・ステップのガイドで提供するチュートリアルもあります。
トピック(Topics)では、Audio & VideoやSecurity、そしてUser Experienceなど、サブジェクト領域で検索するリソースを紹介しています。
フレームワーク(Frameworks)では、UIKitやFoundation、そしてCore Dataなど、フレームワーク固有のドキュメントを紹介しています。

XcodeとオンラインのiOS Developer Libraryは、ドキュメントのフィルタリングに同じユーザインターフェイスを使用しています。
XcodeでiOS Developer Libraryで表示されるものと同じページを参照したい場合は、左側の列のライブラリを選択してください。
その後、ライブラリの内容を参照するには、コンテンツ領域のコンテンツサイドバーの表を使用してください。

frameworksXcode.png

コンテンツの表の項目を選択すると、リソースのリストが右側のコンテンツ領域に表示されます。
TitleやResource Type、Topic、Frameworks(該当する場合)、またはDate(最終修正日)によって、リソースの並べ替えるには列の表題を使用します。
更にリストのフィルタリングに使用することができる検索フィールドがドキュメントバーにあります。
例えばUIKitの全てのリファレンスドキュメントが見たい場合、コンテンツの表のFrameworksカテゴリからUIKitを選択し、Resource Typeによってリソースを並べ替えます。
全てのリファレンスドキュメントは最初に表示され、サンプルコードがそれに続きます。
技術名は知っているが何処にあるか分からない場合は、デベロッパライブラリ内の全てのドキュメントを表示するためにコンテンツの表でiOS Libraryの見出しを選択し、検索フィールドに検索する文字列を入力することができます。

browseByFramework.png

また、ライブラリ内で利用可能な全てのサンプルコードを簡単に表示することができます。
コンテンツの表にある(Resource Types下の)Sample Codeをクリックし、リストの並べ替えやフィルタリングに列の表題や検索フィールドを使用します。
表示された中に興味のあるサンプルコードがあれば選択します。
Xcodeでサンプルを表示している場合は、全てのXcodeプロジェクトファイルの閲覧や、Open Projectボタンをクリックすることができます。
iOS Developer Libraryでサンプルを表示している場合は、Download Sample Codeをクリックすることができます。

sample_code_2x.png



●デベロッパドキュメントの検索

デベロッパドキュメントの検索では、貴方が必要とする特定の情報と直接の関連があるものを発見します。
ライブラリ全体の照会には、オンラインのiOS Developer Libraryの右上角にある検索フィールドを使用します。
検索結果はリソースタイプによってグループ化されます。
例えば検索フィールドでstringWithと入力した場合、最も関連があるガイドとして『String Programming Guide』が、サンプルコードのプロジェクトとしてStringが結果に表示されます。
(編注:2013.1.12現在の検索結果では、Stringというサンプルコードは検出されません。)

searchDevLib.png

Xcodeで検索ナビゲータを表示するには、ナビゲータセレクタバーで検索ボタン(NB_SearchResults-xxx_2x_20130112003706.png )をクリックします。
検索結果はナビゲータ領域に表示され、関連性の高い順に(ReferenceやGuidesなどの)リソースタイプで整理されます。

setNeedsDisplay.png

各ドキュメントはドキュメントタイプのアイコンで識別されます。

  • document_icon_2x.png  トピックカテゴリまたは概念的なドキュメント
  • api_ref_doc_icon_2x.png  APIリファレンスドキュメント
  • xcode-project_icon_2x.png  サンプルコードプロジェクト
  • document.jpg  ドキュメントのページまたは項
  • help_article_icon_2x.png  ヘルプ記事

リファレンスドキュメントのAPIシンボルの結果は更にシンボルタイプのアイコンで識別され、検索語が強調表示されます。

必要に応じて最も関連性のあるリソースに検索結果を絞り込むオプションを使用することができます。
虫眼鏡アイコンをクリックし、『Show Find Options』を選択します。
(編注:現在のXcode 4.5.2では下記の検索オプションとは異なります。)
検索結果のドキュメント内に検索語が少なくとも1つは出現する必要がある指定を行うにはMatch Typeメニューを使用します。
検索にドキュメントセットの任意の組み合わせを選択するにはDoc Setsを使用します。
プログラミング言語の特定の設定用にドキュメントの結果を絞り込むにはLanguageメニューを使用します。

alert_Xcode_4_5.png



●Xcodeでコンテキスト内のリファレンス情報を見る

Xcodeのソースエディタから直接リファレンスドキュメントにアクセスすることができます。
ソースエディタを開き、ナビゲーション領域でソースファイルを選択します。
ソースファイルを開いてユーティリティ領域を表示し、その中にあるQuick Helpインスペクタボタンをクリックします。
ソースエディタでAPIシンボルに挿入ポイントを置くと、インスペクタにドキュメントが表示されます。

表示される情報には以下のリンクが含まれています。

  • シンボルの完全なリファレンスドキュメント
  • シンボルが宣言されているヘッダファイル
  • 関連するプログラミングガイド
  • 関連するサンプルコード

またソースコードでシンボルをOptionを押しながらクリックすることによって、ポップアップウィンドウでAPIシンボルの簡潔なリファレンス情報を表示することができます。

quick_help.png



●簡単にページに戻れるXcodeのブックマークの利用

XcodeのDocumentationオーガナイザでブックマークを追加すると、ページやドキュメント、またはカテゴリに簡単に戻ることができます。
貴方は任意のページまたはドキュメントをブックマークすることができます。

ブックマークはブックマークナビゲータで管理します。
デフォルトでは、ブックマークは貴方が追加した順序でリストされます。
リスト内の新しい位置にドラッグすることによって、ブックマークの順序を変更することができます。
ブックマークを選択してDeleteキーを押すと、ブックマークを削除することができます。
ブックマークに割り当てられた名前は、対応するHTMLページのタイトルです。
(ブックマークの名前を変更することはできません。)

DO_Bookmark_2x.png



●Xcodeについてのヘルプの検索

AppleはまたXcodeの使用についてのドキュメントも提供しています。
Xcodeのオンラインヘルプを閲覧するには、Help > Xcode Helpを選択し、Documentationオーガナイザでスタート画面『Finding Help in Xcode』を開きます。
主題ごとに整理されたヘルプブックのリストについては、Xcode Application Helpをクリックします。
各ヘルプブックは、Xcodeで共通する操作の実行について、ステップ・バイ・ステップでの説明を提供する記事で構成されています。
Xcodeのヘルプの記事の多くは、タスクを説明する短いビデオが含まれています。
ビデオを再生するには、ビデオのサムネイルをクリックしてください。

finding_help_in_xcode.png

また多くのXcodeのヘルプの記事は、Xcodeを介したショートカットメニューからも利用することができます。
その領域で利用することができるヘルプ記事のリストを表示するには、Xcodeのメインユーザインターフェイス領域の任意の場所でControlを押しながらクリックします。
メニューのリストよりも多くの記事がある場合、関連する全てのヘルプ記事を表示するには『Show All Hekp Topics』を選択します。

showAllHelpTopics.png



●iPadでのiOS Developer Libraryの閲覧

iPadではSafari上でドキュメントを表示するためのカスタムインターフェイスがあります。
画面のスペースを節約するには、タイプやトピック、またはフレームワークによってナビゲートするコンテンツの表の代わりにLibraryボタンを使用します。

iOSDevLibOniPad_2x.png

iPadでPDFファイルを表示するには、読みたいドキュメントを選択し、コンテンツコントロールの表をタップして、PDFをタップします。

PDFoniPad_2x.png



●他の開発者やAppleのエンジニアとの問題の討論

XcodeまたはiOS Developer Libraryで必要なものが見つからない場合は、Apple Developerフォーラムに質問を投稿することができます。

iOS Dev Centerにログインすると、ページの下部にApple Developer Forumsのリンクが表示されます。



参考文献

Apple/Start Developing iOS Apps Today

Apple/Find Documentation Quickly

0 CommentsPosted in 資料

Start Developing iOS Apps Today(sup.11)〜App Storeに提出するための準備

2013. 01. 11
貴方のほとんどの時間はコーディング作業に費やされますが、App Store向けに開発するためには、アプリが実行されている期間にXcodeや他のツールを使用して多くの管理作業を実行する必要があります。
App Storeは精選された店で、販売されるアプリは制限を受けます。
Appleはユーザに最高の体験を提供するために、これを行っています。
例えば、App Storeで販売されるアプリはクラッシュや重大なバグを発生させてはいけません。

administration_tasks_2x.png

Appleは開発やテスト、そしてApp Storeにアプリを提出するために必要なツールを提供しています。
デバイス上でアプリを実行するにはデバイスを開発用にプロビジョニングし、その後テスト用にプロビジョニングする必要があります。
またApp Storeが顧客に表示するために貴方のアプリの情報を提供し、スクリーンショットをアップロードする必要があります。
次に承認を受けるためにAppleへアプリを提出します。
アプリが承認されたら、アプリをApp Storeで販売するために表示される日付を設定します。
最後にアプリの売上やカスタマレビュー、そしてクラッシュレポートを監視するためにAppleのツールを使用します。
その後アプリの更新を提出するには、再度全体の行程を繰り返します。

iCloudストレージやIn-App Purchaseなどの特定の技術を使用する場合は、追加の構成と管理作業を行う必要があります。
また開発チームを管理するために行う作業もあります。



●iOS Developer Programへの登録

App Store向けの開発では、最初にiOS Developer Proguramに参加する必要があります。
プログラムに登録した後は、アカウントの管理やデバイス上でアプリの実行を開始するために必要な、全てのリソースやツールへのアクセス権を持ちます。

貴方はAppleとの主要な連絡先となり、法律上の契約書に署名し、アセットを作成し、アプリの販売を行います。
貴方が個人開発者か企業か尋ねられます。
企業の場合、貴方のチームに他の人を追加し、貴方のアカウントを管理するためにいくつかの権限を付与します。
開発中にデバイス上でアプリを実行する必要がある個人も、貴方のチームに追加する必要があります。

貴方は以下のiOS Developer Programのウェブツールを使用して、アカウントを管理します。

  • メンバーセンター
    開発者プログラムのアカウントの管理や、チームメンバーの招待、技術サポートの購入、互換性ラボへのサインアップに使用する主要なツールです。
    またメンバーセンターは、他のリソースやツールへの入口です。

  • iOSプロビジョニングポータル
    アプリケーションIDの登録や、デバイスの登録、署名証明書の作成、プロビジョニングプロファイルの作成に使用するウェブツールです。
    これらの行程はセキュリティに必須なもので、未熟なアプリが配布されないよう保証するものです。

  • iTunes Connect
    契約状態の確認や、税や銀行情報の設定、販売や財務報告書の取得、アプリに関するメタデータの管理に使用するマーケティング/ビジネスツールです。

Xcodeを使用してiOSプロビジョニングポータルの管理作業の一部を実行し、http://developer.apple.com/membercenterにあるメンバーセンターに行くことによって必要に応じてウェブツールに戻ることができます。

1_membercenter_2x.png



●プロジェクトの生成とApp Store用への構成

テンプレートからXcodeのプロジェクトを生成した場合、App Storeの設定のいくつかは貴方のために完了しています。
Xcodeは貴方に製品名と会社IDを入力するように求めます。
バンドルIDはこの2つの属性に由来します。
例えばHelloWorldプロジェクトでは、製品名がHelloWorldで会社IDはedu.selfです。
したがってデフォルトのバンドルIDは、edu.self.HelloWorldになります。
Xcodeは他の値にも同様に合理的なデフォルト値を使用します。
アプリの生成に使用するテンプレートと、プロジェクトの構成に使用する設定は慎重に検討する必要があり、正しいテンプレートで開始することは開発工程の高速化に役立ちます。

これらの設定を後から変更したい、あるいはiCloudストレージをしたい場合は、XcodeのTARGETSのSummaryペインで(エンタイトルメントの有効化を含む)これらの設定のほとんどを見つけることができます。
例えば検証試験に合格するためには、Summaryペインの『iPhone / iPod Deployment Info』下に表示されている、アプリアイコンや起動画像を設定する必要があります。
これらの画像はApp Storeで貴方のアプリを表すために使用されます。

2_configureapp_2x.png



●開発用デバイスのプロビジョニング

開発中にデバイス上で貴方のアプリを実行するには、貴方のMacに接続し、開発用に有効にし、Appleによって認定される必要があります。
これにはアプリや貴方自身、そしてデバイスに関するいくつかの情報を提供して行います。
貴方は自身を識別するための開発用証明書と呼ばれる署名証明書を作成します。
この情報は全て開発用プロビジョニングプロファイルに組み込まれ、最終的にデバイスにインストールされてアプリを起動することができます。

貴方はXcodeが作成するiOSチームプロビジョニングプロファイルとデフォルトのアプリケーションIDを使用して、開発用にプロビジョニングしたデバイスをXcodeのデバイスオーガナイザで使用することができます。
(ただしiCloudストレージやプッシュ通知、In-App Purchase、またはGame Centerを使用する場合、特別なプロビジョニングプロファイルを作成する必要があります。)

初めてデバイスオーガナイザでプロビジョニングプロファイルを更新すると、Xcodeは署名証明書を作成します。
Xcodeは貴方に代わって開発用と配布用の両方の証明書を作成します。
(配布証明書は、後にテストやApp Storeにアプリを提出するために必要となります。)

iOSチームプロビジョニングプロファイルを使用すると、すぐにデバイス上でアプリの実行を開始することができます。
初めて貴方のアカウントにデバイスを追加すると、XcodeはデフォルトのアプリケーションIDを使用してiOSチームプロビジョニングプロファイル、デバイスID、そして開発用証明書を作成します。
iOSチームプロビジョニングプロファイルにデバイスを追加するには、単に貴方のMacにデバイスを接続し『Use for Development』ボタンをクリックしてください。
その後、Xcodeは貴方のMacに接続されているデバイスに、このプロファイルを自動的にインストールします。
またXcodeは新しいデバイスが開発用にプロビジョニングされた場合に、このプロビジョニングプロファイルを更新します。

6_registerdevice_before_2x_20130109164310.png

アプリをビルドする際、貴方が使用したいプロビジョニングプロファイル内に含まれている署名証明書を使用して、コードに署名します。
Xcodeのプロジェクトエディタで、iOS チームプロビジョニングプロファイルに含まれている開発用証明書にCode Signing Identityを設定するには、Build SettingsのCode Signing Identityポップアップメニューを使用します。

9_codesigningidentitymenu.png

開発用デバイスをプロビジョニングした後、Xcodeにデバイス上でアプリを起動するように命じることができます。
アプリをビルドする前に、Schemeポップアップメニューで実行先の設定を変更することによって、これを行います。
貴方のMacに有効なプロビジョニングプロファイルを組み込んだデバイスが接続されている場合、Schemeポップアップメニューの実行先のオプションとして、その名前とiOSのバージョンが表示されます。
Schemeエディタを開くには、Product > Edit Scheme...を選択します。

10_destinationmenu_2x.png



●多くのデバイスやiOSバージョン上でのアプリのテスト

貴方は様々なデバイスやiOSバージョン上でアプリのテストを行う、綿密な計画を立てる必要があります。
シミュレータや開発用にプロビジョニングされたデバイスを使用してのアプリのテストでは十分ではありません。
シミュレータではデバイス上で実行される全てのスレッドは実行されず、Xcodeを使用したデバイス上でのアプリの起動ではいくつかのウォッチドッグタイマーが無効になります。
最低でも貴方が利用できる全てのデバイス上でアプリをテストする必要があります。
理想的には貴方がサポートする予定の全てのデバイスとiOSバージョンでアプリをテストします。

これを行うには、アドホックプロビジョニングプロファイルと呼ばれる特殊な配布用プロビジョニングプロファイルを生成し、アプリと一緒にテスターに送信します。
アドホックプロビジョニングプロファイルは、テスターを貴方のチームに追加したり、署名証明書を作成したり、あるいはアプリの実行にXcodeの使用を必要としません。
アプリのテスターは単にアプリを起動するため、デバイスにアプリとアドホックプロビジョニングプロファイルをインストールするだけです。
その後、問題を解決するためにこれらのテスターからクラッシュレポートやログを収集し分析することができます。

最初にテスターから全てのデバイスIDを収集し、iOSプロビジョニングポータルに追加します。
テスターはiTunesを使用してデバイスIDを取得することができます。
iOSプロビジョニングポータルを使用して、貴方のアプリケーションIDとこれらのデバイスIDを含むアドホックプロビジョニングプロファイルを作成します。

11_createadhoc.png

アプリをテストする準備ができたら、Xcodeを使用してアーカイブを作成し、iOS App Store Package(拡張子.ipaを持つファイル)を生成します。
Archivesオーガナイザでアーカイブを選択してDistributeボタンをクリックし、パッケージを作成するために『Save for Enterprise or Ad-Hoc Deployment』オプションをクリックします。
パッケージを作成する際は、開発用証明書を使用してアーカイブに署名します。
その後、iOSプロビジョニングポータルからアドホックプロビジョニングプロファイルをダウンロードし、IPAファイルと一緒にテスターに与えます。

12_createpackage.png

テスターはiTunesを使用して、彼らのデバイス上にプロビジョニングプロファイルとアプリをインストールします。
デバイス上でアプリがクラッシュした場合、iOSはイベントの記録を作成します。
テスターが次回iTunesにデバイスを接続した時に、iTunesはテスターのMacに(クラッシュログとして知られる)それらの記録をダウンロードします。
テスターは貴方にこれらのクラッシュログを送信する必要があります。



●iTunes Connectでのアプリデータの設定

App Storeでアプリを販売する場合、アプリの名前や説明、アイコン、スクリーンショット、貴方の会社の連絡先情報など、アプリに関する多くの情報が提示されます。
これらの情報を提供するには、iTunes Connectにログインしアプリのレコードを作成し、いくつかのフォームを記入します。
iTunes ConnectのレコードにはバンドルIDのためのフィールドが含まれており、このフィールドに置く値は貴方のアプリのバンドルIDと正確に一致する必要があります。
アプリ名とバージョンもXcodeのプロジェクト設定と一致している必要があります。
App Storeで貴方のアプリを顧客に提示するために必要なアートワークは、検証テストに合格するためにアップロードする必要があります。
アプリのレコードの状態は、少なくともApp Storeにアプリを提出する『Waiting for Upload』にする必要があります。

13_itunesconnectrecord.png

通常レコードを作成する時からアプリを提出する時まで時間制限があるので、開発工程の後半にiTunes Connectのアプリのレコードを作成します。
ただし、Game CenterやIn-App Purchaseを含むいくつかのAppleの技術は、早期にiTunes Connectのレコードを作成する必要があります。
例えばIn-App Purchaseでは、貴方が販売したいアイテムの詳細を追加できるように、アプリのレコードを作成する必要があります。
この内容はIn-App Purchaseを実装するために追加されたコードのテストに使用できるように、開発工程が完了する前に作成する必要があります。



●App Storeでのアプリの配布

App Storeにアプリを提出するには、いくつかのツールを伴う多段階の工程があります。
最初にiTunes Connectにログインし、アプリのレコードの状態を『Waiting for Upload』またはそれ以降に変更します。
その後、iOSプロビジョニングポータルを使用して、配布用証明書と配布用プロビジョニングプロファイルを作成します。
Xcodeを使用してアーカイブを作成し、検証し、App Storeへ提出します。
アプリが承認された場合、iTunes Connectを使用して顧客がアプリを利用できるになる日付を設定します。

アプリを公開する準備ができたら、配布の方法としてApp Storeを選択することによって、配布用プロビジョニングプロファイルを作成します。
このプロビジョニングプロファイルの種類の場合、署名証明書やデバイスIDは不要で、アプリケーションIDのみを選択してください。

15_createdistributionprofile.png

アプリの検証と提出にはXcodeのArchivesオーガナイザを使用します。
最初にアーカイブを作成し、配布用証明書で署名します。
次にiTrunes Connectのレコードで提供されている情報だけでなく、アーカイブ内のアプリに対して自動検査を実行し、アーカイブを検証します。
検証中に問題が発見された場合は、続行する前に修正する必要があります。

アプリを提出する前に、問題を回避するために『App Store Review Guidelines』を読む必要があります。
Distributeボタンをクリックし『Submit to the iOS App Store』オプションをチェックすると、アプリのガイドラインに準拠しているかどうかを検査するため、XcodeはAppleにアーカイブを送信します。
アプリが拒否された場合、アプリの承認中に発生した問題を修正し、再提出します。

iTunes Connectを使用して、App Storeにアプリを公開する日付を設定します。
例えば、承認された直後にApp Storeにアプリを公開する日付にしたり、あるいはそれ以降の将来の日付を選択することができます。
公開日を遅らせることで、アプリの立ち上げに伴う他のマーケティング活動の準備をすることができます。



●ユーザの問題への対応

App Storeへアプリを提出するだけで、それを忘れてはいけません。
貴方はアプリのレコードを管理し、アプリが存続している期間を通して保守する必要があります。
一度App Storeで利用できるようになったら、貴方はアプリを監視する必要があり、ユーザの問題に対応し、必要に応じてアップデートを行います。

貴方はユーザがどのようにアプリを認識しているかに注意を払ってください。
App Storeの顧客の評価とレビューはアプリの成功に大きな影響を持っているため、ユーザが問題に遭遇した場合、素早く作業してバグを特定し、承認工程を通じてアプリの新バージョンを提出してください。

iTunes Connectはアプリの売上と財務報告書、顧客レビュー、ユーザがAppleに提出したクラッシュログを含む、どのように成功させるか判断するのに役立つデータを提供します。
クラッシュログは、ユーザがアプリで遭遇している重大な問題を表しているため、特に重要です。
貴方はこれらの報告を高い優先順位で調査する必要があります。

低メモリによるクラッシュログを除き、全てのクラッシュログには終了時の各スレッドのスタックトレースが含まれています。
クラッシュログを表示するには、XcodeのOrganizerウィンドウから開く必要があります。
貴方のMacがクラッシュログが生成されたアプリのバージョンに対応するアーカイブを持っていると、Xcodeは自動的にクラッシュログのアドレスとアプリ内の実際のクラスや関数を対応付けします。



●iCloudストレージまたはIn-App Purchase用のデバイスのプロビジョニング

特定の技術を使用する場合、明示的にアプリケーションIDを使用して特殊なプロビジョニングプロファイルを作成し、それに応じたアプリを構成する必要があります。
AppleはiOSやApp Store、そしてAppleのサーバなどでこれらの技術を使用するアプリを独自に識別するために、このアプリケーションIDを使用します。
これらのプロビジョニングプロファイルを必要とする技術は以下の通りです。

  • iCloudストレージ
    異なるiOSやMac OS Xデバイス上で実行されているアプリの複数のインスタンス間で、ユーザのデータを共有することができます。

  • プッシュ通知
    フォアグラウンドで実行されていないアプリが持つユーザのための情報を、ユーザに通知することができます。

  • In-App Purchase
    アプリ内に直接ストアを埋め込むことによってApp Storeに接続できるようにし、ユーザからの支払いを安全に処理します。

  • Game Center
    プレイヤがプレイしているゲームについての情報を共有し、マルチプレイヤマッチで他のプレイヤが参加することができるソーシャルゲームサービスです。

開発用プロビジョニングプロファイルは、署名証明書のリストとアプリケーションID、そしてデバイスIDのリストを含んでいます。
以前に開発用のデバイスをプロビジョニングするためにiOSチームプロビジョニングプロファイルを使用した場合、署名証明書とデバイスIDは貴方のアカウントで既に登録されています。
Xcodeによって提供されるアプリケーションIDは、全てのバンドルIDと一致するワイルドカードIDです。
貴方はアプリのバンドルIDと正確に一致するアプリケーションIDを作成し、開発用プロビジョニングプロファイル内のワイルドカードのアプリケーションIDの代わりに使用する必要があります。
iCloudストレージまたはプッシュ通知を使用する場合、アプリケーションIDはそれらの技術の使用を有効にする必要があります。

貴方はアプリケーションIDの登録や開発用プロビジョニングプロファイルの作成に、iOSプロビジョニングポータルを使用します。
明示的なアプリケーションIDは正確に貴方のバンドルIDと一致します。

14_register_appid.png

明示的なアプリケーションIDを作成する場合、In-App PurchaseとGame Centerはデフォルトで有効になっています。
プッシュ通知またはiCloudストレージを有効にしたい場合は、App IDsページでアプリケーションIDの次にあるConfigureをクリックし、適切なオプションを選択します。
特殊なプロビジョニングプロファイルでアプリケーションIDを使用する前に、これらの技術を有効にする必要があります。

17_enableicloud.png

開発用プロビジョニングプロファイルを作成する場合、明示的にアプリケーションIDと署名証明書、そして使用するデバイスIDを選択します。
プロビジョニングプロファイルの状態がPendingからActiveに変わると、Xcodeのプロビジョニングプロファイルが更新され、アプリの署名に新しいプロファイルが使用されます。
同様にテスト用のアドホックプロビジョニングプロファイルと、明示的なアプリケーションIDを使用して提出するための配布用プロビジョニングプロファイルを作成します。

iCloudストレージを使用する場合、XcodeでTARGETSのSummaryペインのEntitlements下にあるエンタイトルメントを有効にし、iCloudを構成してください。



参考文献

Apple/Start Developing iOS Apps Today

Apple/Prepare for App Store Submission

0 CommentsPosted in 資料

Start Developing iOS Apps Today(sup.10)〜アプリの国際化

2013. 01. 08
App Storeで多くの人気のあるアプリは複数の言語に対応しています。
これらの人気には多くの要因があるかもしれませんが、複数のローカリゼーションが利用できるということが要因の1つです。
貴方のアプリにはより多くの潜在的な購入者を持っており、その人々が理解し使用できるようにします。

アプリを複数言語で使用できるようにするためには、国際化しローカライズする必要があります。
国際化はアプリの実行時にリソースのユーザ設定を選択することができるようにするため、ローカライズされたリソースを構成する技術です。
ローカリゼーションは、テキストの表示や(VoiceOverなど)アプリによる発音を翻訳するものです。
またロケール固有の画像や他のリソースの追加も含めることができます。
(ローカリゼーションは、例えば簡体字(中国語)などの特定の言語とロケールによってローカライズされたリソースのセットを参照できることです。)

アプリはどのようにユーザインターフェイスのローカリゼーションを選択するのか:
設定アプリ(一般 > 言語環境 > 言語)で、ユーザはiOSデバイスでアプリのユーザインターフェイスとシステム自体に表示したい言語を選択します。
アプリは要求される言語として、ローカライズされたリソースへアクセスするためのキーとしてこの設定を使用します。

国際化の全ての面について学ぶには『Internationalization Programming Topics』を参照してください。



●このチュートリアルで行うこと

このチュートリアルでは、英語と中国語(簡体字)の2つのローカリゼーションをサポートするように、HelloWorldアプリを国際化します。
その後、以下のテキストをローカライズします。

  • 両方の言語のストーリーボード内のテキスト

  • アプリを構成する文字列と、ユーザがHelloボタンをクリックした時に表示する文字列

  • ユーザに表示するアプリ名

注:簡体字中国語は、このチュートリアルの例として使用する言語です。
貴方が中国語を理解していない場合は、ローカライズされたテキストの各項目について、このチュートリアルで示す中国語の文字をコピーし、プロジェクト内の適切な場所にペーストすることができます。
また希望する場合、追加するローカリゼーションに簡体字中国語以外の言語を使用することができます。

このチュートリアルでは、国際化のためにユーザインターフェイスとレイアウトの制約を修正します。

このチュートリアルでは、プロジェクトへの画像ファイルやサウンドファイルなどのローカライズされたリソースの追加については示していません。
それを行う方法については、『Internationalization Programming Topics』の適切な項を参照してください。

言語設定で簡体字中国語を選択し、国際化されたHelloWorldを起動するとアプリは次のようになります。

helloworld_chinese_2x.png



●Base Internationalizationの使用

Base InternationalizationはXcode 4.5で導入された機能で、アプリがサポートする各言語用にストーリーボードやnibファイルを修正する必要性を軽減するローカライザ(つまり翻訳者)です。
その代わりに、アプリは既定の言語にローカライズされたストーリーボードまたはnibファイルのセットを1つだけ持ち、このストーリーボードやnibファイルはBase Internationalizationと呼ばれます。
アプリにローカリゼーションを追加する場合、Xcodeは各ストーリーボードまたはnibファイルにアクセシビリティラベルまたはヒントとして、表示するまたは含まれている全てのテキストのためにstringsファイルを生成します。
Xcodeはストーリーボード名とstrings拡張子を与えます。
ストーリーボード名がMyStoryboard.storyboardの場合、生成されるstringsファイル名はMyStoryboard.stringsになります。

お分かりのように、stringsファイルはアプリのテキスト(値)と別の文字列(キー)を関連付けます。
ローカライザはユーザインターフェイス内のテキストの識別を助けるためにキーを使用し、それからテキストを変換します。
Base Internationalizationでアプリのユーザインターフェイスを構築する場合、それらのビューが変更される際に隣接するビューがそれに伴って位置やサイズを、表示する翻訳された文字列に適切に対応することを保証するため、Auto Layout機能を使用する必要があります。

Base Internationalizationの使い方
  1. XcodeでHelloWorldのPROJECTを選択し、Infoペインを表示します。

    internat_choose_base_2x.png

  2. Localizationsテーブル下のUse Base Internationalizationオプションを選択します。
    XcodeがBase Internationalizationを使用するストーリーボードの選択を尋ねるシートを表示します。

    internat_select_base_sb_2x.jpg

  3. MainStoryboard.storyboardが選択され、参照言語がEnglishであることを確認します。
    Finishボタンをクリックします。

  4. プロジェクトナビゲータでMainStoryboard.storyboard(Base)を選択します。

  5. ラベルオブジェクトが『Label』と表示されている場合、テキストを選択するためにダブルクリックし、削除してください。
  6. この最終工程はユーザに『Label』を見せる必要が無く、翻訳する必要が無いためです。

注:Xcode 4.5より前では、開発者と翻訳者がアプリのサポートする各言語毎にストーリーボードやnibファイルを修正する必要がありました。
ストーリーボードまたはnibファイルの可視/可聴テキストの翻訳だけでなく、翻訳後のビューのサイズや位置を調整する作業が必要でした。



●ローカリゼーションの追加

HelloWorldを作成した際、Xcodeは英語にローカライズされたリソース用に、Xcodeプロジェクトに自動的にフォルダを追加しました。
その後Base Internationalizationに要請し、貴方のプロジェクトに別のフォルダを追加しました。
Finderで貴方のプロジェクトファイルを見ると、Base.lprojという名前のフォルダとは別に(英語のローカリゼーション用の)en.lprojという名前のフォルダがあるはずです。
前者のフォルダ内にはストーリーボードファイルがあり、後者のフォルダにはInfoPlist.stringsファイルがあります。
(InfoPlist.stringsファイルについての詳細は『アプリ名のローカライズ』を参照してください。)
英語は貴方のプロジェクトのデフォルト言語です。
ローカリゼーションを追加したい場合は、Xcodeでそれらを追加する必要があります。

プロジェクトへのローカリゼーションの追加
  1. プロジェクト設定のInfoペインを選択します。

    internat_projectsettings_2x.png

  2. ローカリゼーションテーブルのプラスボタン(+)をクリックし、ポップアップメニューから簡体字中国語を選択します。
    簡体字中国語は言語ID zh-Hansによって識別されます。

    internat_selectLang_2x.jpg

  3. ファイルや参照言語の選択を尋ねるシートでは、下方に示される全ての設定と選択を確認してください。
    その後Finishボタンをクリックします。

この作業が完了すると、Xcodeは新しいローカリゼーションを表示するために、プロジェクトナビゲータを更新します。
MainStoryboard.storyboardの隣にある三角マークをクリックすると、そのファイルのローカリゼーションであるBase(英語)と簡体字中国語が表示されます。

internat_inProjNavigator_2x.png

貴方はおそらくプロジェクトナビゲータに2種類のstringsファイルがあることに気付いたことでしょう。
ローカリゼーションを追加すると、Xcodeはそれらの両方を生成します。
最初のstringsファイルはBase Internationalization(MainStoryboard.strings)に由来します。
これにはXcodeがストーリーボードファイル内で検出したテキストから自動的に生成した、1つ以上のキー値ペアが含まれています。
2つ目のstringsファイルはInfoPlist.stringsで、(アプリ名など)ユーザに表示されるアプリケーションのプロパティのローカライズに使用します。
これはコンテンツ無しで始まります。
以降の項でstringsファイルの両方のタイプについて詳細を学びます。

アプリケーションバンドル内のローカリゼーションフォルダ:

アプリケーションはバンドルで、バンドルは実行可能コードとコードが使用するリソースが含まれている構造化されたディレクトリです。
これらのリソースは、ローカライズまたは(全ての言語で共通の)非ローカライズすることができます。
ローカライズされたリソースは、code.lprojと名付けられたバンドル内にあるフォルダに入れられます。
codeは次に示す要素で構成されます。

  • 言語ID
    ISO 639-1(2文字)またはISO 639-2(3文字)の言語識別子です。
    (ISOは国際標準化機構の略です。)
    ハイフンで接尾辞を追加することで、例えば中国語の簡体字(-Hans)と繁体字(-Hant)など、言語の方言を指定することができます。

  • ロケールID
    オプションで指定するISO 3166-1のロケールまたは地域の識別子です。
    ロケールIDは2文字で、アンダースコア文字を使用して言語指定と連結される大文字のコードです。
    例えば、en_GB.lprojというIDは英語-イギリスを意味します。

これらの規則の例外は、ストーリーボードやnibファイルのBase Internationalizationを識別するBase.lprojです。



●正確な入力ソースの使用

簡体字中国語のローカリゼーションのために中国語の文字を入力する場合は、文字入力に適切な入力ソースが必要となります。
OS Xのシステム環境設定で、入力ソースを変更することができます。

簡体字中国語のために適切な入力ソースを選択する

システム環境設定アプリを起動し、『言語とテキスト』を選択します。

システム環境設定を起動するには、アップルメニューでシステム環境設定を選択します。
(これはXcodeの機能ではありません。)

『入力ソース』ビューを選択します。

入力ソースのリストから『Chinese - Simplified』を選択します。

input_source_pref_2x.png

『メニューバーに入力メニューを表示』オプションが選択されていることを確認してください。

アクティブな入力ソースを作成するために、メニューバーで簡体字中国語の入力ソースを選択することができます。

select_input_source_2x.png



●stringsファイルについて

stringsファイルにはキーとして使用される任意の文字列に対応した、特定言語にローカライズされたテキスト項目が含まれています。
ファイルはstrings拡張子を持っています。
デバイス上でアプリを実行した際、stringsファイル内でユーザが設定している言語の文字列を検索し、表示します。
(もちろん、アプリはその言語のローカリゼーションをサポートしている必要があります。)
iOSでは、国際化で3種の異なるstringsファイルを使用します。

  • XcodeがBase Internationalizationやnibファイルから自動的に生成するstringsファイル。

  • 情報プロパティリスト、表示するアプリ名など、アプリの情報プロパティリスト内のユーザ可視プロパティをローカライズするためのstringsファイル。

  • アプリのコードによって文字列の生成と表示を行うためのstringsファイル。

以降の項で、アプリを国際化する場合のこれらの各種stringsファイルを構成する方法を説明します。
全てのstringsファイルのエントリは、以下の基本形式を持っています。

/* Comment to localizers */
"Key" = "Value";

コメントはローカライズされた文字列のコンテキストを明確にすることによって、翻訳者を支援することを意図しています。
コメントの次に(独自の行として)、キー、等号、値、そして終端のセミコロンがあります。
値は常に引用符で囲まれた文字列です。
キーは通常引用符で囲まれた文字列ですが、グローバル文字列として宣言されたシンボルにすることもできます。



●ストーリーボードのテキストのローカライズ

各ローカリゼーションはアプリのプロジェクトに追加され、XcodeがStroryboardName.stringsという名前のBase Internationalizationのストーリーボードからstringsファイルを生成し、プロジェクト内に(zh-Hans.lprojなどの)ローカリゼーション用のフォルダを書き込みます。

簡体字中国語のstringsファイルを調べるには
  1. プロジェクトナビゲータでMainStoryboard.storyboardの隣にある三角マークをクリックし、その下の項目を開きます。

  2. MainStoryboard.strings (Chinese)という名前の項目を選択します。

  3. プロジェクトエディタにstringsファイルの内容が表示されます。

HelloWorldアプリでは、XcodeがBase Internationalizationから以下のstringsファイルを生成します。

/* Class = "IBUITextField"; accessibilityHint = "Type your name"; ObjectID = "PzI-FE-QQF"; */
"PzI-FE-QQF.accessibilityHint" = "Type your name";

/* Class = "IBUITextField"; placeholder = "Your Name"; ObjectID = "PzI-FE-QQF"; */
"PzI-FE-QQF.placeholder" = "Your Name";

/* Class = "IBUIButton"; normalTitle = "Hello"; ObjectID = "fYK-eX-amY"; */
"fYK-eX-amY.normalTitle" = "Hello";

ストーリーボード内の文字列毎に、Xcodeはテキスト表示オブジェクトの識別子からキーとピリオド、そして文字列が割り当てられているプロパティを連結します。
(等号の後ろにある文字列の)値はBase Internationalizationストーリーボードの可視または可聴文字列です。
翻訳者はこれらの文字列を変換します。
(各エントリのコメントはこの情報を繰り返しますが、Xcodeで知られているようにオブジェクトのクラスが追加されます。)
ユーザの設定言語がBase Internationalizationと異なる場合、アプリは実行時に現在のローカリゼーションのStoryboardName.stringsファイル内にある一致する文字列で、Base Internationalizationストーリーボード内の各文字列を動的に置換します。
図1-1にこの工程を示します。

図1-1 Base Internationalizationからの文字列のローカライズ

storyboard_strings_2x.png

簡体字中国語への文字列のローカライズ
  1. メニューバーから簡体字中国語の入力ソースを選択します。

    中国語キーボードが利用できる場合は使用可能です。
    (アメリカ英語などの)他のキーボードを代わりに使用する場合は、キーマッピングを知っている必要があります。

    以下の例から中国語文字をコピーして貴方のstringsファイルにペーストする(あるいは別の言語にテキストをローカライズする)場合は、この工程を省略することができます。

  2. プロジェクトエディタに表示するために、プロジェクトナビゲータでMainStoryboard.strings (Chinese)ファイルを選択します。

  3. 各値の文字列(つまり等号の右側にある文字列)を簡体字中国語に翻訳します。

    中国語をコピー&ペーストする場合は、以下で提供される文字をコピーしてください。

  4. ファイルを保存します。(File > Save)

HelloWorldのユーザインターフェイスはとても単純で、1つのストーリーボード、1つのシーン、そして3つの文字列だけです。
より複雑なユーザインターフェイスを持つアプリは多くのテキストを含むビューを持つことができるため、多くの文字列をローカライズすることになります。
Xcodeはキーに埋め込まれたオブジェクトIDを使用することによって、テキストを表示するビューを識別するのに役立ちます。
ストーリーボードのビュー(例えばHelloボタン)を選択し、Identityインスペクタを開きます。
このインスペクタのDocument欄のオブジェクトIDを見て、stringsファイル内のオブジェクトIDと照合します。

internat_objectID_2x.png

中国語のローカリゼーション用MainStoryboard.stringsファイルの内容は次のようになります。

/* Class = "IBUITextField"; accessibilityHint = "Type your name"; ObjectID = "PzI-FE-QQF"; */
"PzI-FE-QQF.accessibilityHint" = "键入您的姓名";

/* Class = "IBUITextField"; placeholder = "Your Name"; ObjectID = "PzI-FE-QQF"; */
"PzI-FE-QQF.placeholder" = "您的姓名";

/* Class = "IBUIButton"; normalTitle = "Hello"; ObjectID = "fYK-eX-amY"; */
"fYK-eX-amY.normalTitle" = "您好";



アプリ名のローカライズ

アプリのプロジェクトへローカリゼーションを追加する場合、デフォルトではXcodeによってInfoPlist.stringsという名前のファイルが生成され、ファイルシステム内に(zh-Hans.lprojなどの)ローカリゼーションフォルダに書き込まれます。
このファイルには最初は何も内容が無く、ユーザに表示される情報プロパティリスト内の文字列をローカライズするためのキー値ペアを含む必要があります。
HelloWorldアプリでは、このプロパティリストはHelloWorld-Info.plistです。

最も重要なユーザ可視プロパティは、これからローカライズするアプリの表示名です。
InfoPlist.stringsファイル内のキーは、情報プロパティリスト内で見つけることができるフレームワークで宣言されたシンボルです。

アプリ名のローカライズ
  1. HelloWorldのTARGETSを選択し、Infoビューを選択します。

  2. プロパティのテーブル内の任意の場所をControlを押しながらクリックし、コンテキストメニューから『Show Raw Keys/Values』を選択します。

    internat_showcfprops_2x.png

  3. (アプリの表示名を表すCore Foundationのシンボルである)CFBundleDisplayNameを探します。

  4. エディタにファイルを表示するために、プロジェクトナビゲータ内でInfoPlist.stringsファイルを選択します。

    これは簡体字中国語のローカリゼーションのためのファイルです。
    IdentityインスペクタのLocalozation欄で、選択されたファイルのローカリゼーションを照合することができます。

    internat_checkLocalization_2x.png

  5. InfoPlist.stringsファイルに以下の行を入力し、FileメニューでSaveを選択してファイルを保存します。

    /* The name of the app displayed on the device*/
    CFBundleDisplayName = "您好,世界";

    この場合、キーを引用符で囲む必要はありません。

情報プロパティリスト内のユーザ可視プロパティが既に英語なので、第一言語である英語のローカリゼーション用のInfoPlist.stringsファイルは編集する必要はありません。



●コードによる文字列表示のローカライズ

アプリのコードは多くの場合、実行時にテキストの文字列の生成と表示を行います。
HelloWorldプロジェクトでは、changeGreeting:メソッドにおいてプログラムで生成されたテキストが見られます。

- (IBAction)changeGreeting:(id)sender {
     self.userName = self.textField.text;

     NSString *nameString = self.userName;
     if ([nameString length] == 0) {
          nameString = @"World";
     }
     NSString *greeting = [[NSString alloc] initWithFormat:@"Hello, %@", nameString];
     // programmatically created
     self.label.text = greeting;
}

このメソッドはテキストフィールドから表示される名前を取得し、NSStringクラスのinitWithFormat:メソッドを使用して名前と文字列『Hello, 』を連結します。
このテキストを表示するには、組み立てられた文字列にラベルのtextプロパティを設定します。
ここでの国際化の問題は、アプリがサポートする各ローカリゼーション毎に単語『Hello』を翻訳する必要があるということです。
コードで生成される文字列をローカライズするため、iOSの国際化機能はstringsファイルとNSLocalizedStringマクロを提供しています。
以下の項で、このファイルとマクロを使用する方法について説明します。


Localizable.stringsファイルの設定

プログラムによって表示するテキストのローカライズされた文字列を含むstringsファイルの慣例的な名前はLocalizable.stringsです。
これらのファイルを1つは英語、もう1つは簡体字中国語用に2つ生成し、それらに適切なキー値ペアを追加します。

各ローカリゼーション用のLocalizable.stringsファイルの追加
  1. Xcodeのプロジェクトナビゲータで、Supporting Filesフォルダを選択します。

  2. File > New > File...を選択します。

  3. iOSのResourcesカテゴリでStrings Filesテンプレートを選択し、Nextボタンをクリックします。

    internat_addStrings_2x.jpg

  4. Save Asフィールドでファイル名をLocalizable.stringsに変更し、Createボタンをクリックします。

    (選択されているターゲットなど)デフォルトの設定は変更せず、そのままにします。

  5. プロジェクトナビゲータでLocalizable.stringsを選択し、Identityインスペクタで『Make localized』ボタンをクリックします。

    internat_addLocalizable_2x.png

  6. 確認ダイアログが表示されたら、プルダウンメニューでEnglishが選択されていることを確認し、Localizeボタンをクリックします。

    internat_localizable_en_2x.jpg

    この工程の後の『Make localized』ボタンは、現在のローカリゼーションの一覧表に置換されます。

  7. 簡体字中国語のローカリゼーションにLocalizable.stringsファイルを追加するには、Chineseチェックボックスを選択します。

これで両方のローカリゼーション用のLocalizable.stringsファイルを持つことになったので、これらにキー値ペアを追加します。

『Hello』文字列のローカライズ
  1. プロジェクトナビゲータでLocalizable.strings (English)を選択します。

  2. エディタで以下のテキストを入力します。

    /* The string displayed */
    "HELLO" = "Hello, %@";

    キーとして識別し易いように左側の文字列(『HELLO』)は大文字にしています。

  3. プロジェクトナビゲータでLocalizable.strings (Chinese)を選択します。

  4. エディタで以下のテキストを入力します。

    /* The string displayed */
    "HELLO" = "您好,%@";


NSLocalizedStringマクロの呼び出し

NSLocalizedStringマクロは、現在のローカリゼーション用のLocalizable.stringsファイルからローカライズされた文字列を取得します。
HelloWorldアプリでは、テキスト『@"Hello, %@"』を置換するためにこのマクロが必要になります。

コード内でのローカライズされた文字列の要求
  1. プロジェクトナビゲータでHelloWorldViewController.mを選択します。

  2. changeGreeting:メソッドで以下の文を修正します。

    NSString *greeting = [[NSString alloc] initWithFormat:@"Hello %@", nameString];

    次のように見えるようにします。

    NSString *greeting = [[NSString alloc] initWithFormat:NSLocalizedString(@"HELLO", @"The string displayed"), nameString];

マクロの最初のパラメータはstringsファイル内のキーを取得するもので、2つ目のパラメータは翻訳者に対するコメントです。
マクロは、ユーザが設定している言語に対応するローカリゼーションにおけるキーの値を返します。
この例で、マクロのパラメータとして翻訳者に対するコメントを含めることに疑問を感じるかもしれませんが、いずれにしても英語と中国語の両方のLocalizable.stringsファイル内でコメントは記述しています。

大規模なアプリケーションのプロジェクトでは多くの場合、genstringsという名前のコマンドラインのプログラムを使用して、貴方のコード内で検出した情報からstringsファイル(デフォルトではLocalizable.strings)を生成します。
ユーティリティはその都度NSLocalizedStringマクロを呼び出すように見えますが、(初期値でもある)キーとコメントを抽出し、それらの項目をstringsファイルに書き込みます。
その後、貴方のプロジェクトの各ローカリゼーションにstringsファイルを追加し、値を変換することができます。



●国際化のテスト

おめでとうございます。
貴方はアプリを国際化し簡体字中国語にローカライズすることができました。
それではユーザが簡体字中国語に言語を設定した場合にその文字列が表示されるか、アプリをテストしてみましょう。

簡体字中国語でのアプリのテスト
  1. iOSシミュレータを実行して設定アプリを起動し、言語設定として簡体字中国語を選択します。

    iOSシミュレータがHelloWorldまたは他のアプリを実行している場合は、ホームボタンをクリックしてください。

    SettingsアプリでGeneral > International > Languageを選択します。
    次に下図の例に示しているテーブルの行をクリックします。
    Doneボタンをクリックします。

    internet_test_language_2x.png

  2. Xcodeでアクティブなスキームが『iPhone version number Simulator』であることを確認し、Runボタンをクリックします。

    XcodeはiOSシミュレータでHelloWorldを実行します。
    下図のようになります。

    helloworld_zh_beforeal_2x.png

  3. メニューバーから入力ソースとして簡体字中国語を選択し、テキストフィールドにいくつかの中国語文字を入力してボタンをクリックします。

    アプリは『您好, characters typed』と表示するはずです。
    現在の言語に翻訳されていない文字列を見つけた場合には、stringsファイルでそれらを翻訳するようにしてください。

  4. ハードウェアメニューで『反時計回りに回転』または『時計回りに回転』を選択して向きの変更をシミュレートし、何が起こるかを確認してください。

  5. ホームボタンをクリックすることによってアプリを終了し、iPhoneでシミュレートしたアプリを見つけます。

    helloworld_zh_appname_2x.png

    アプリ名が簡体字中国語にローカライズされていることに注意してください。

もちろん、ほとんどの商用アプリはHelloWorldよりも多くのテキストを表示し、画像やその他のリソースが含まれている場合もあります。
そして、それらのアプリはいくつかのローカリゼーションを持っているかもしれません。
各ローカリゼーションでアプリを実行し、各画面やダイアログへ移動してテキストを表示し、ローカライズされていない文字列やリソースがあるかを確認する必要があります。

貴方のアプリがVoiceOver用に構成されている場合、アプリがアクセシビリティ用に適切にローカライズされていることを確認してください。
この目的のために、iOSシミュレータに組み込まれているAccessibility Inspectorを使用する手段もあります。
Accessibility Inspectorの詳細については『iOSアクセシビリティプログラミングガイド』を参照してください。



●国際化のためのAuto Layoutの使用

簡体字中国語のローカリゼーションでHelloWorldアプリのテストをした際に、向きの変更をシミュレートしました。
アプリは任意のローカリゼーションで適切になるような方法でテキストを表示しました。
テキストフィールドのテキストとプログラムで表示するラベルのテキストは、(顔面の幅を占有して)そのオブジェクトの中央に配置されるため、向きに関係無くあらゆる合理的な長さにすることができます。
そしてローカライズされた文字列に合わせてボタンのサイズが変更されます。

もちろん、オブジェクトが画面の中央に表示されて隣にオブジェクトの無い、HelloWorldのような単純なユーザインターフェイスを持つアプリは少数です。
ユーザインターフェイスでのテキストの一般的な設計は、テキストフィールドに付いているラベルです。
特定言語用のStoryboardName.stringsファイル内のラベルのテキストを翻訳する場合、ラベルは新しいテキストに合わせてサイズを変更する必要があります。
それと図1-2に示すように、新しいラベルサイズに合わせてテキストフィールドの幅も変更する必要があります。

図1-2 一般的なローカリゼーションパターンのAuto Layout

autolayout_example_2x.png

このチュートリアルの残りの部分では、iOSのAuto Layoutと、アプリの国際化に寄与するレイアウトの規則の指定に、どのようにXcodeのAuto Layout機能を使用することができるかについて少し学びます。
その後、ラベル-テキストフィールドのデザインを持つユーザインターフェイスへ修正し、図1-2に示すような動作をするように変更します。

Auto Layoutの詳細については『Cocoa Auto Layoutガイド』を参照してください。


XcodeでのAuto Layoutのツアー

iOSのAuto Layoutシステムはアプリのビューのレイアウトのための規則を定義することができ、あるビューがサイズや位置を変更した際に隣接しているビューは適切にサイズや位置を調整します。
Auto Layoutはデバイスの向きの変化に対応するための重要な機能です。
またBase Internationalizationを使用する場合は特に、アプリを国際化するための重要な機能です。

Auto Layoutでは、貴方のアプリのユーザインターフェイスをレイアウトする方法を記述するために、レイアウトの制約を使用します。
初めてのiOSアプリケーション』でHelloWorldのユーザインターフェイスを構成した際、例えばスーパービューに固定されているオブジェクトの縁に対して追従または追跡して、推奨されるオブジェクト間の間隔を使用し、Aquaのガイドラインに沿ったAuto Layoutシステムによって自動制約を受け入れていました。
ストーリーボードのシーン内にあるビュー周辺のレイアウトの細い青線は、自動制約を示しています。
今から、これらの制約を検討します。

レイアウト制約の検討
  1. プロジェクトナビゲータでMainStoryboard.storyboard (base internationalization)を選択します。

  2. Hello World View Controllerのアウトラインビューで、各制約項目の隣にある三角マークをクリックして内容を開示します。

    アウトラインビューは以下のようになります。

    internat_constraints_2x.png

  3. 制約(例えば、Horizontal Space - Label - View)を選択し、Attributesインスペクタを開きます。

    Attributesインスペクタは制約に関する情報を以下のように表示します。

    internat_constraints2_2x.png

    インスペクタ内の値はラベルのスーパービューを参照しています。
    Standardがチェックされている場合、制約が自動であることを意味し、つまりAuto LayoutシステムがAquaガイドラインに従ってオブジェクトをレイアウトしています。

    またXcodeは以下の工程で説明するように、特定のビューに関連付けられた全ての制約を表示することができます。

  4. テキストフィールドを選択し、Sizeインスペクタを選択します。

    制約を表示することに加えて、SizeインスペクタにはビューのContent HuggingとContent Compression Resistance Priority値を表示します。

    internat_constraintsPerView_2x.png

自動制約の設定を上書きし、それによってユーザ制約を生成することはできますが、それを行う必要はありません。
前述したように、HelloWorldの単純なユーザインターフェイスはローカリゼーションに適しています。
(プレースホルダテキストを伴う)テキストフィールドとラベルは画面全体に拡張し、事実上任意の長さの文字列にすることができます。
そしてHelloボタンはローカライズされた各タイトルにサイズを変更し、スーパービューの中心に配置されたままになります。


国際化のためのユーザインターフェイスの修正

アプリでより一般的なユーザインターフェイスであるラベル-テキストフィールドのペアに、HelloWorldのユーザインターフェイスを修正します。

HelloWorldアプリのユーザインターフェイスとレイアウト制約の変更
  1. テキストフィールドを選択し、Attributesインスペクタでプレースホルダの欄から『Your Name』を削除します。

  2. スーパービューの右半分を占めるように、テキストフィールドの幅のサイズを変更します。

  3. ユーティリティ領域のオブジェクトライブラリを開き、ストーリーボードのシーンにラベルオブジェクトをドラッグします。

    internat_dragLabel_2x.png

  4. ラベルを選択し、AttributesインスペクタでAlign Rightボタンをクリックします。

    internat_rightAlignLabel_2x.png

  5. テキストフィールドを選択し、Align Leftボタンをクリックします。

  6. ラベルのデフォルトのテキスト(Label)をダブルクリックして選択し、『Your Name:』に置換します。

  7. ラベルをテキストに合わせ、自動制約(細い青線)が有効になるまで、ラベルとテキストフィールドの位置とサイズを変更します。

    両方のオブジェクトを選択したユーザインターフェイスは次のようになります。

    internat_finalLabelField_2x.png

  8. 新しいラベルオブジェクトを選択し、SizeインスペクタでContent Hugging PriorityのHorizontalを1,000に設定します。

    internat_setContentHugging_2x.png

    Content Hugging Priorityはビューをどのくらい他のビューとの相対的な内容にしてサイズを調整する必要があるかを、Auto Layoutシステムに指示するものです。
    このラベルの場合、1,000という値は常に文字列を含むように自身のサイズを変更する必要があることを意味します。
    テキストフィールドのContent Hugging Priorityがデフォルト値である250のままであるので、ラベルの幅が変更された場合はそのオブジェクトの幅が変化します。

ラベル-テキストフィールドのペアが国際化されました。
ラベルのテキストとして『A Very Long Name』と入力しReturnを押すと、テキストフィールドは新しいラベル値を収容するために幅を短く表示します。
また英語ローカリゼーションでアプリを実行し、その後簡体字中国語ローカリゼーションで実行すると、動作の変化を確認することができます。



●ストーリーボードを変更した際の、ストーリーボードのstringsファイルの更新

先程完了したAuto Layoutの練習では、HelloWorldのユーザインターフェイスに新しいテキスト表示オブジェクトとして『Your Name:』ラベルを追加しました。
その結果、中国語のMainStoryboard.stringsファイルは、現在Base Internationalization(MainStoryboard.storyboard)との同期から外れています。
コマンドラインユーティリティibtoolを使用して、Base Internationalizationから新しいstringsファイルを生成し、それから既存のMainStoryboard.stringsファイルに新しいstringsファイルを追加します。

新しいユーザインターフェイスオブジェクトと既存の中国語MainStoryboard.stringsファイルとの結合
  1. ターミナルアプリを起動します。

    このアプリは『/アプリケーション/ユーティリティ』にあります。

  2. ターミナルのシェルで、貴方のプロジェクトフォルダ内のBase.lprojディレクトリに接続します。

    例えば、

    cd /Users/UserName/Projects/HelloWorld/HelloWorld/Base.lproj

  3. プロンプトの後に以下のコマンドを入力してください。

    ibtool MainStoryboard.storyboard --generate-strings-file NewStuff.strings

    出力ファイルには任意の名前(この例ではNewStuff.strings)を指定することができます。

  4. 生成された出力ファイルをXcodeで開き、新しいstringsファイルのエントリ(つまり"Your Name:"ラベル用のコメントとキー値ペア)を中国語のMainStoryboard.stringsファイルにコピーします。

  5. 新しい文字列値を翻訳します。



参考文献

Apple/Start Developing iOS Apps Today

Apple/Internationalize Your App

0 CommentsPosted in 資料

Start Developing iOS Apps Today(sup.9)〜アプリのコアオブジェクトを知る

2013. 01. 02
UIKitフレームワークは全てのアプリの基盤を提供しますが、貴方のアプリの固有の動作の定義をするのはカスタムオブジェクトです。
貴方のアプリはイベントループの管理と主要なiOSとの相互通信を行う、僅かな特定のUIKitオブジェクトで構成されます。
サブクラス化やデリゲーション、その他の技術の組み合わせによって、貴方のアプリを実装するためにUIKitによって定義されたデフォルトの動作を変更します。

UIKitオブジェクトのカスタマイズに加え、他のオブジェクトの鍵となる設定を提供または定義する責任もあります。
オブジェクトの最も重要な設定はアプリのデータモデルで、その定義は完全に貴方の責任になります。
またユーザインターフェイスのオブジェクトの設定も提供する必要があります。
幸いUIKitは、貴方のインターフェイスを簡単に定義するための多数のクラスを提供しています。
出荷可能なアプリを提供するため、コードに加え、必要なリソースやデータファイルを提供しなければなりません。

iOSアプリケーションプログラミングガイド』は、この記事で触れている多くのトピックの詳細を説明しています。



●アプリのコアオブジェクト

アプリがユーザによって起動した時から終了する時まで、UIKitフレームワークはアプリのコアとなる動作のほとんどを管理します。
アプリの心臓部はUIApplicationオブジェクトで、システムからのイベントを受信し、処理を行う貴方のカスタムコードにディスパッチします。
その他のUIKitクラスもアプリの動作の管理部分で役割を果たしており、これらのクラスの全てが詳細を処理する貴方のカスタムコードを呼び出すのと同様の方法を持っています。

UIKitオブジェクトが貴方のカスタムコードとどのように連携するのかを理解するには、iOSアプリを構成するオブジェクトについて少し理解することが助けになります。
図1はiOSアプリで最も一般的に見られるオブジェクトを示し、表1は各オブジェクトの役割を説明しています。
図を見ると分かるように、iOSアプリはモデル-ビュー-コントローラのデザインパターンを中心に構成されています。
このパターンは、データの表示に使用するビューからモデルのデータオブジェクトを分離しています。
この分離は必要に応じてビューのスワップアウトを可能にすることによってコードの再利用を促進し、ユニバーサルアプリ(iPadとiPhoneの両方で実行することができるアプリ)を生成する際に特に有効です。

図1 iOSアプリのキーオブジェクト

core_objects_2x.png


表1 iOSアプリのオブジェクトの役割

オブジェクト説明
UIApplicationオブジェクトUIApplicationオブジェクトは基本的にサブクラスかせずに使用します。
このコントローラオブジェクトはアプリのイベントループを管理し、他の高レベルのアプリの動作を調整します。
貴方が独自にカスタマイズしたアプリレベルのロジックはアプリのデリゲートオブジェクトに存在し、このオブジェクトと連携して動作します。
アプリのデリゲートオブジェクトアプリのデリゲートは通常UIApplicationMain関数によって、アプリの起動時に生成されるカスタムオブジェクトです。
このオブジェクトの主な仕事は、アプリ内の状態遷移を処理することです。
例えば、このオブジェクトは起動時の初期化と、バックグラウンドとの行き来の遷移を処理を担当しています。
iOS 5以降では、アプリに関連する他のイベントの処理にアプリのデリゲートを使用することができます。
Xcodeのプロジェクトテンプレートは、UIResponderのサブクラスとしてアプリのデリゲートを宣言します。
UIApplicationオブジェクトがイベントを処理しない場合、その処理をアプリのデリゲートにディスパッチします。
ドキュメントとデータモデルオブジェクトデータモデルオブジェクトはアプリ固有のもので、アプリのコンテンツを格納します。
例えば、銀行取引アプリは金融取引を含むデータベースを格納するのに対し、描画アプリは画像オブジェクトまたは画像を生成する描画コマンドのシーケンスを格納します。
(描画コマンドの場合、画像オブジェクトは画像データのコンテナであるため、データオブジェクトのままです。)
またアプリは、データモデルオブジェクトの一部または全部を管理するドキュメントオブジェクト(UIDocumentのカスタムサブクラス)を使用することができます。
ドキュメントオブジェクトは、必須ではありませんが単一ファイルまたはファイルパッケージに属するデータをグループ化する便利な方法を提供しています。
ドキュメントについての詳細は『ドキュメントベースのデータモデルの定義』を参照してください。
ビューコントローラオブジェクトビューコントローラオブジェクトは、画面上でのアプリのコンテンツの表示を管理します。
ビューコントローラは単一のビューと、そのサブビューのコレクションを管理します。
提供されると、ビューコントローラがアプリのウィンドウに設置することで、ビューが表示されます。
UIViewControllerクラスは、全てのビューコントローラオブジェクトの基本クラスです。
ビューを読み込んで表示し、デバイスの回転に応じてビューを回転させたり、いくつかの他の標準的なシステムの動作のための機能をデフォルトで提供します。
UIKitと他のフレームワークは、イメージピッカーやタブバーインターフェイス、ナビゲーションインターフェイスなど、標準的なシステムのインターフェイスを実装するため、追加のビューコントローラを定義しています。
UIWindowオブジェクトUIWindowオブジェクトは、画面上の1つ以上のビューの表示を調整します。
ほとんどのアプリはメイン画面のコンテンツを表示するウィンドウを1つだけ持ちますが、外部ディスプレイにコンテンツを表示するために追加のウィンドウを持つ場合があります。
アプリのコンテンツを変更するには、対応するウィンドウに表示されているビューを変更するためにビューコントローラを使用します。
ウィンドウ自体を置換することはありません。
更にビューをホスティングするため、ウィンドウはビューとビューコントローラにイベントを送信するUIApplicationオブジェクトと連携します。
ビュー、コントロール、レイヤオブジェクトビューとコントロールは、アプリのコンテンツの視覚表現を提供します。
ビューは指定された矩形領域内にコンテンツを描画し、その領域内のイベントに応答するオブジェクトです。
コントロールはボタンやテキストフィールド、トグルスイッチなど、よく知られているインターフェイスオブジェクトを実装するための、応答可能なビューの特殊な種類です。
UIKitフレームワークは、コンテンツの多くの種類を表示するための標準的なビューを提供します。
またUIView(またはその子孫)を直接サブクラス化することによって、独自のカスタムビューを定義することができます。
ビューやコントロールを組み込むことに加えて、アプリもビューやコントロール階層にCore Animationレイヤを組み込むことができます。
レイヤオブジェクトは視覚的コンテンツを表示する実際のデータオブジェクトです。
ビューはそれらのコンテンツのレンダリングするために、裏舞台でレイヤオブジェクトを多用しています。
またインターフェイスにカスタムのレイヤオブジェクトを追加し、複雑なアニメーションや他の種類の洗練された視覚効果を実装することもできます。

あるiOSアプリを別のアプリと区別するのは、管理するデータ(と対応するビジネスロジック)と、ユーザにデータをどのように表示するかです。
ほとんどのUIKitオブジェクトとの相互作用は貴方のアプリを特徴付けるものではありませんが、動作を洗練するのに役立ちます。
例えばアプリのデリゲートのメソッドは、アプリが状態を変化させた時にカスタムコードが適切に応答できるよう、貴方に知らせます。



●データモデル

アプリのデータモデルはデータ構造と、データを整合性のある状態で維持するために必要なビジネスロジックから構成されます。
データモデルは、アプリのユーザインターフェイスから完全に分離して設計することはできません。
ただし、データモデルオブジェクトは独立して実装しなければならず、特定のビューまたはビューコントローラの存在に依存してはいけません。
ユーザインターフェイスからデータの独立性を維持すると、
簡単 実装 ユニバーサルアプリ(iPadとiPhoneの両方で実行できるもの)の実装が容易になり、また後で簡単にコードの一部を再利用することができます。

まだデータモデルを定義していない場合、iOSのフレームワークはそのための手助けを提供します。
以下の項では、データモデルの特定の種類を定義する際に使用することができる技術のいくつかを紹介します。


カスタムデータモデルの定義

カスタムデータモデルを定義する場合、任意の高レベルの構造を表現するためにカスタムオブジェクトを生成しますが、システムが提供する単純なデータ型を利用します。
Foundationフレームワークは、単純なデータ型の文字列や数値、その他の型をオブジェクト指向の方法で管理する多くのオブジェクトを提供しています。
新規にオブジェクトを定義する際はこれらのオブジェクトを使用するのが望ましく、時間を節約することになり、多くの他のシステムルーチンは組み込みのオブジェクトを使用すると想定しています。

表2 Foundationフレームワークのデータクラス

データクラス説明
文字列とテキストNSString (NSMutableString)
NSAttributedString
(NSMutableAttributedString)
iOSの文字列はUnicodeに基づいています。
文字列クラスは様々な方法で文字列の生成および操作のサポートを提供しています。
属性付き文字列クラスは定型化されたテキストをサポートし、Core Textとの組み合わせでのみ使用されます。
数値NSNumber
NSDecimalNumber
NSIndexPath
コレクション内に数値を格納したい場合は数値オブジェクトを使用します。
NSNumberクラスは整数や浮動小数点、ブール値、そしてchar値を表すことができます。
NSIndexPathクラスには一連の番号が格納されており、しばしば階層的なリストで多層選択を指定するために使用されます。
生のバイト列NSData (NSMutableData)
NSValue
生のバイトストリームを格納する必要がある場合は、データオブジェクトを使用します。
またデータオブジェクトは一般的にアーカイブ形式でオブジェクトを格納するために使用されます。
NSValueクラスは通常(カテゴリを使用して)拡張され、点や矩形のような一般的なデータ型のアーカイブに使用されます。
日付と時刻NSDate
NSDateComponents
タイムスタンプやカレンダーの日付、その他時間関連の情報を格納するためには日付オブジェクトを使用します。
URLNSURLネットワークリソースへの参照に使用する従来の方法に加えて、iOSのURLはファイルへのパスを格納するための望ましい方法です。
NSURLクラスはファイル関連の属性の取得と設定のサポートを提供します。
コレクションNSArray (NSMutableArray)
NSDictionary (NSMutableDictionary)
NSIndexSet
(NSMutableIndexSet)
NSOrderedSet
(NSMutableOrderedSet)
NSSet (NSMutableSet)
コレクションは関連するオブジェクトを一箇所にまとめてグループにするために使用します。
Foundationフレームワークは、いくつかの異なる種類のコレクションクラスを提供します。

データ関連のオブジェクトに加えて、通常のデータ型を管理するためのiOSフレームワークによって使用される、いくつかの一般的な他のデータ型があります。
独自のカスタムオブジェクトで類似したデータ型を表すには、以下のようなデータ型の使用を推奨します。

  • NSInteger/NSUInteger
    アーキテクチャに基づいたサイズの整数を定義する、符号付きおよび符号無しのスカラ整数を抽象化したものです。

  • NSRange
    一連の連続した部分の定義に使用する構造体です。
    例えば、文字列内の選択された文字を定義する範囲に使用することができます。

  • NSTimeInterval
    指定した時間間隔の(整数または小数の)秒数です。

  • CGPoint
    位置を定義するxとyの座標値です。

  • CGSize
    水平方向と垂直方向の大きさのセットを定義する座標値です。

  • CGRect
    矩形領域を定義する座標値です。

もちろんカスタムオブジェクトを定義する際に、常にクラスの実装に直接スカラ値を組み込むことができます。
実際、カスタムデータオブジェクトはメンバ変数にスカラ値とオブジェクト型を混在させることができます。
リスト1は、画像のコレクション用のサンプルクラスの定義を示しています。
このインスタンス内のクラスは、画像の配列と選択項目を表す配列のインデックスのリストが含まれています。
またクラスにはコレクションのタイトル用の文字列と、コレクションが現在編集可能かどうかを示すスカラのブール変数が含まれています。

リスト1 カスタムデータオブジェクトの定義

@interface PictureCollection : NSObject

@property (nonatomic, copy) NSString * title;
@property (nonatomic) BOOL editable;
@property (nonatomic, readonly) NSOrderedSet* pictures;
@property (nonatomic) NSMutableIndexSet *selection;

// Method definitions...

@end

カスタムオブジェクトにアンドゥ処理が必要かどうかを検討してください。
アンドゥを支援することは、貴方のオブジェクトに加えられた変更を奇麗に取り消すことができることを意味します。
貴方のオブジェクトが複雑なビジネスロジックを含んでいる場合、簡単にアンドゥすることができる方法をロジックに織り込む必要があります。
貴方のカスタムオブジェクトにアンドゥのサポートを実装するためのいくつかのヒントをここに示します。

  • オブジェクトへの変更が対称であるかを確認する必要があるようにメソッドを定義してください。
    例えば項目を追加するメソッドを定義する場合、同様の方法で項目を削除するためのメソッドを持っていることを確認してください。

  • メンバ変数の値を変更するために使用するコードから、ビジネスロジックを括り出してください。

  • 多段階のアクションでは、段階ごとにグループにし、現在のNSUndoManagerオブジェクトを使用してください。

Core Dataを使用した構造化データモデルの定義

Core Dataはスキーマ駆動のオブジェクトグラフの管理と永続化のためのフレームワークです。
基本的に、Core Dataは(モデル-ビュー-コントローラデザインパターンの観念での)モデルオブジェクトを保存し、それらから再度取得するのに役立ちます。
これはアーカイブに似ていますが、Core Dataはそれよりも遥かに多い機能を提供します。

  • Core Dataはモデルオブジェクトへの全ての変更を管理するための基盤を提供します。
    これによりアンドゥとリドゥ、およびオブジェクト間の相互関係を保持するための自動サポートを提供します。

  • iOSアプリにとって非常に重要な、任意の時間にメモリ内のモデルオブジェクトのサブセットだけを保持することができます。

  • モデルオブジェクトの記述にスキーマを使用します。
    GUIベースのエディタでモデルクラス(と、それらの間の関係を含む)の主要な機能を定義します。
    このスキーマはデフォルト値と属性値の検証の設定を含め、多量の基本的な機能を『何もせずとも』提供します。

  • オブジェクトの編集セットを個別に保持することができます。
    個別のセットは、例えばユーザが他のビューで表示されているデータに影響を与えること無く、あるビューで破棄される可能性のある編集を行いたい場合に役立ちます。

  • データストアのバージョン管理と移行のための基盤を持っています。
    バージョン管理は、簡単に古いバージョンのユーザファイルを現在のバージョンに更新することができます。

  • iCloudにデータを格納し、複数のデバイスからアクセスすることができます。

ドキュメントベースのデータモデルの定義

ドキュメントベースのデータモデルは、アプリによるファイルのディスクへの書き込みを管理する便利な方法です。
このデータモデルの種類では、ディスク上の単一ファイル(またはファイルパッケージ)の内容を表すために、ドキュメントオブジェクトを使用します。
ドキュメントオブジェクトはファイルの内容の読み込みや書き込みに対する責任があり、アプリのビューコントローラと連携して画面上のドキュメントの内容を表示します。
従来のドキュメントオブジェクトの用途は、ユーザデータを格納するファイルの管理でした。
例えば、テキストファイルを生成および管理するアプリでは、各テキストファイルを管理するために個別のドキュメントオブジェクトを使用していました。
一方、ファイルによってバックアップされている非公開のアプリデータも、ドキュメントオブジェクトを使用することができました。

図2にアプリのデータモデル内のドキュメントとファイル、そしてオブジェクト間の典型的な関係を示しています。
いくつかの例外はありますが、各ドキュメントは自己完結型であり、他のドキュメントと直接相互通信することはありません。
ドキュメントは単一ファイル(またはファイルパッケージ)で管理され、ファイル内で見つけた全てのデータの内容がメモリ内に生成されます。
各ファイルの内容は唯一であるため、各ドキュメントに関連付けられたデータ構造も唯一です。

図2 ファイルのコンテンツの管理にドキュメントを使用

document_model_2x.png

iOSアプリでドキュメントオブジェクトを実装するにはUIDocumentクラスを使用します。
このクラスは、ドキュメントのファイル管理を処理するために必要な、基本的な基盤を提供します。
UIDocumentのその他の利点は以下の通りです。

  • 適切な時期にドキュメントの内容の自動保存のサポートを提供します。

  • iCloudに格納されたドキュメントに必要なファイル管理の調整を処理します。
    またバージョンの競合を解決するフックも提供します。

  • アンドゥ操作のサポートを提供します。

アプリのドキュメントが必要とする特定の動作を実装するために、UIDocumentをサブクラス化する必要があります。



●ユーザインターフェイス

全てのiOSアプリはコンテンツを表示するために、少なくとも1つのウィンドウと1つのビューを持っています。
ウィンドウはコンテンツを表示するための領域を提供する、UIWindowクラスのインスタンスです。
ビューはコンテンツの描画(とタッチイベントの処理)を管理する責任がある、UIViewクラスのインスタンスです。
ビューオブジェクトを使用してインターフェイスを構築する場合、アプリのウィンドウには当然複数のビューオブジェクトが含まれます。
OpenGL ESを使用してインターフェイスを構築する場合、通常は単一のビューを持ち、コンテンツのレンダリングにそのビューを使用します。

またビューコントローラは、アプリのユーザインターフェイスで非常に重要な役割を果たしています。
ビューコントローラはUIViewControllerクラスのインスタンスで、単一のビューのセットを管理する責任があり、それらのビューとアプリの他の部分の間との相互通信を行います。
iOSアプリはコンテンツを表示するための空間の量が限られており、またビューコントローラはあるビューコントローラからビューをスワップアウトし、それらと別のビューコントローラのビューを置換するために必要な基盤を提供します。
したがって、あるコンテンツの型から別の型への遷移を実装するには、ビューコントローラが必要になります。

ビューコントローラオブジェクトは、常に自己完結型のユニットとして考える必要があります。
所有しているビューの生成と破棄を処理し、画面上への表示を処理し、ビューとアプリ内の他のオブジェクトとの間の相互通信を調整します。


UIKitのビューを使用したインターフェイスの構築

描画にUIKitのビューを使用するアプリは、基本的なインターフェイスを手早く組み立てることができるため、簡単に生成することができます。
UIKitフレームワークは、データを整理して表示するための多くの種類のビューを提供しています。
コントロール(ビューの特殊な種類)は、ユーザが適切なアクションを行う度にカスタムコードを実行するため、組み込みのメカニズムを提供しています。
例えば、ボタンをクリックするとボタンに関連付けられたアクションメソッドが呼び出されます。

UIKitのビューを基にしたインターフェイスの利点は、Xcodeに組み込まれているビジュアルインターフェイスエディタであるInterface Builderを使用して、グラフィカルにそれらを組み立てることができるということです。
Interface Builderは、貴方のインターフェイスを構築するのに必要なビューやコントロール、そしてその他のオブジェクトを標準のライブラリで提供します。
ライブラリからこれらのオブジェクトをドラッグした後、作業面上にドロップして望む場所に自由に配置できます。
ストーリーボードまたはnibファイルにそれらを保存する前に、これらのオブジェクトを設定するにはインスペクタを使用します。
インターフェイスをグラフィカルに組み立てる工程は同等のコードを記述するよりも速く、アプリをビルドして実行する必要無しにすぐに結果を視認することができます。

注:またUIKitのビュー階層にカスタムビューを組み込むこともできます。
カスタムビューは全ての描画とイベント処理のタスクの自身で処理する、UIViewのサブクラスです。

図3にビューオブジェクトのみ使用して構築されたインターフェイスのアプリの基本構造を示します。
この例では、ウィンドウ(ステータスバーを除く)の表示領域がメインビューで埋められ、単純な白い背景を提供しています。
また、メインビューにはイメージビューとテキストビュー、そしてボタンの3つのサブビューが含まれています。
これらのサブビューは、アプリがユーザにコンテンツを表示し、相互通信に応答するために使用されます。
階層内の全てのビューは単一のビューコントローラオブジェクトによって管理されています。

図3 ビューオブジェクトを使用したインターフェイスの構築

view_layer_objects_2x.png

通常のview-basedアプリは、ビューコントローラオブジェクトを使用して画面上のビューを調整します。
アプリは常に1つのビューコントローラを持ち、画面上の全てのコンテンツを表示する責任があります。
ビューコントローラはコンテンツビューを持ち、それ自体が他のビューを含んでいる場合があります。
いくつかのビューコントローラは、他のビューコントローラによって提供されるコンテンツのコンテナとして機能することもできます。
例えば、スプリットビューコントローラは隣り合う2つのビューコントローラのコンテンツを表示します。


ビューとOpenGL ESを使用したインターフェイスの構築

高フレームレートや精巧な描画性能を必要とするゲームやその他のアプリは、ビュー階層にOpenGL ESでの描画用に特化して設計されたビューを追加することができます。
OpenGL ESアプリの簡単なタイプは、1つのウィンドウオブジェクトとOpenGL ESによる描画のための単一のビュー、そして表示とコンテンツの回転を管理するためのビューコントローラを持っています。
より洗練されたアプリケーションは、インターフェイスの実装にOpenGL ESビューとUIKitビューを混在して使用することができます。

図4にインターフェイスの描画に単一のOpenGL ESビューを使用したアプリの構成を示します。
UIKitビューとは異なり、OpenGL ESビューはview-basedアプリで使用されている標準のレイヤの代わりに、異なる種類のレイヤオブジェクト(CAEAGLLayerオブジェクト)によって裏打ちされています。
CAEAGLLayerオブジェクトは、OpenGL ESでレンダリングすることができる描画サーフェイスを提供します。
描画環境を管理するために、アプリはEAGLContextオブジェクトを生成し、ビューにCAEAGLLayerオブジェクトを格納して簡単に取得できるようにしています。

図4 OpenGL ESを使用したインターフェイスの構築

gl_layer_objects_2x.png



●アプリバンドル

iOSアプリをビルドすると、Xcodeはバンドルとしてパッケージングします。
バンドルは関連するリソースを一纏めにしたファイルシステム内のディレクトリです。
iOSアプリのバンドルにはアプリの実行可能ファイルと、アプリアイコンや画像ファイル、ローカライズされたコンテンツなど、サポートするリソースファイルが含まれています。
表3にデモンストレーションを目的としたMyAppと呼ばれる典型的なiOSアプリのバンドル内容を示します。
この例では説明のみを目的としています。
この表でリストされているいくつかのファイルは、貴方のアプリバンドルでは表示されない場合があります。

表3 典型的なアプリバンドル

ファイル説明
アプリ実行可能ファイルMyApp実行可能ファイルはアプリのコンパイル済みのコードが含まれています。
アプリ実行可能ファイルの名前は、アプリ名から.app拡張子を除いたものと同じです。
このファイルは必須です。
情報プロパティリストファイルInfo.plistInfo.plistファイルはアプリの構成データが含まれています。
システムがどのようにアプリと相互通信するかを決定するために使用されます。
このファイルは必須で、Info.plistという名前である必要があります。
アプリアイコンIcon.png
Icon@2x.png
Icon-Small.png
Icon-Small@2x.png
アプリアイコンはデバイスのホーム画面上で貴方のアプリを表示するために使用されます。
他のアイコンは適切な場所にシステムによって使用されます。
ファイル名に@2xが付いているアイコンは、Retinaディスプレイを持つデバイスを対象としています。
アプリアイコンは必須です。
起動画像Default.png
Default-Portrait.png
Default-Landscape.png
アプリが起動している間、システムが一時的な背景として使用するファイルです。
アプリがユーザインターフェイスを表示する準備ができると、すぐに取り除かれます。
起動画像は少なくとも1つ必要です。
ストーリーボードファイル(またはnibファイル)MainBoard.storyboardストーリーボードは、アプリが画面上に表示するビューとビューコントローラが含まれています。
ストーリーボード内のビューは、それらを表示するビューコントローラに応じて構成されます。
またストーリーボードは、あるビューのセットから別のセットへユーザを誘導する(セグエと呼ばれる)遷移を識別します。
メインストーリーボードのファイル名は、プロジェクト生成時にXcodeによって設定されます。
Info.plistファイルのNSMainStoryboardFileキーに異なる値を割り当てることによって、名前を変更することができます。
NSMainStoryboardFileキーをNSMainNibFileキーに置換し、メインnibファイルを指定することによって、アプリはストーリーボードの代わりにnibファイルを使用することができます。
ストーリーボードの使用はオプションですが推奨されています。
アドホック配布アイコンiTunesArtworkアプリをアドホックで配布する場合、512 x 512ピクセルのバージョンのアプリアイコンを含めます。
このアイコンは通常iTunes Connectに提出する素材を元にApp Storeによって提供されます。
しかしApp Storeを経由しないアプリのアドホック配布では、App Storeの代わりにアプリバンドル内にアイコンが存在している必要があります。
iTunesはアプリを表すために、このアイコンを使用します。
(アプリをこの方法で配布する場合、App Storeに提出するものと同じファイルを指定する必要があります。)
アイコンのファイル名は、ファイル名に拡張子を含まないiTunesArtworkである必要があります。
このファイルはアドホック配布するためには必須で、それ以外の場合はオプションです。
SettingsバンドルSettings.bundleSettingsアプリを介してカスタムアプリの設定を公開したい場合、Settingsバンドルを含める必要があります。
このバンドルにはプロパティリストのデータと、アプリの設定を定義する他のリソースファイルが含まれています。
Settingsアプリは、貴方のアプリが必要とするインターフェイス要素を組み立てるために、このバンドルの情報を使用します。
このバンドルはオプションです。
非ローカライズリソースファイルsun.png
mydata.plist
非ローカライズリソースには、画像やサウンドファイル、動画、そしてアプリが使用するカスタムデータファイルのようなものが含まれます。
これらのファイルは全てアプリバンドルの最上位に位置している必要があります。
ローカライズリソースを置くサブディレクトリen.lproj
fr.lproj
es.lproj
ローカライズされたリソースは言語固有のプロジェクトディレクトリに配置する必要があり、名前はISO 639-1の言語略語に.lproj接尾辞を加えた構成になります。
(例えばen.lproj、fr.lproj、es.lprojディレクトリには、英語、フランス語、スペイン語にローカライズされたリソースが含まれます。)
iOSアプリは国際化し、サポートする各言語毎にlanguage.lprojディレクトリを持つ必要があります。
アプリのカスタムリソースのローカライズされたバージョンを提供するだけでなく、アプリアイコン、起動画像、そしてSettingsアイコンを、言語固有のプロジェクトディレクトリ内に同名ファイルを配置するによってローカライズすることができます。



参考文献

Apple/Start Developing iOS Apps Today

Apple/Know the Core Objects of Your App

0 CommentsPosted in 資料






bose_soundlink_revolve
Calendar
12 | 2013/01 | 02
Sun Mon Tue Wed Thu Fri Sat
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

bose_soundlink_revolve
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR