iOS 6のiOS SDKリリースノート

2013. 06. 09
内容:

はじめに
バグレポート
注釈と既知の問題



はじめに

iOS 6 SDKはiOSアプリケーションを開発するためのサポートを提供するもので、iOSとOS X用のアプリケーションを生成するためのXcodeツール、コンパイラ、フレームワークの完全なセットが含まれています。
これらのツールには、Xcode IDEやInstruments分析ツールなどの多くが含まれています。

このソフトウェアでは、iOS 6を実行するiPhone、iPad、iPod touch用のアプリケーションを開発することができます。
また含まれているiOS 6をサポートするiOSシミュレータを使用して、アプリケーションのテストをすることもできます。
iOS 6 SDKは、OS X 10.7.4(Lion)以上を実行しているMacコンピュータが必要です。

このiOSのバージョンはAppleのデベロッパプログラムに登録されたデバイスにのみインストールすることを意図しています。
不正な方法でこのiOSのバージョンのインストールを試みると、デバイスが使用不能な状態になります。

詳細や追加のサポートリソースについては、iOS Developer Programをご覧ください。



バグレポート

注釈と既知の問題』の項で言及されていないバグ報告については、AppleデベロッパウェブサイトのAppleバグレポータ(Bug Reporting)を使用してください。
またAppleデベロッパフォーラム(http://devforums.apple.com)で、これらの問題やiOS 6 SDKを議論することができます。
開発者向けのiCloudについての詳細についてはiCloud for Developersで取得することができます。



注釈と既知の問題

以下の問題は、コードの開発でiOS 6 SDKを使用する際に関連します。


●Accountsフレームワーク



●Address Book

  • 連絡先へのアクセス要求

    ユーザは各アプリケーションごとに連絡先データへのアクセスを許可または拒否することができます。
    連絡先データへのアクセス要求をするには、ABAddressBookCreateWithOptions関数を呼び出した後に、ABAddressBookRequestAccessWithCompletion関数を呼び出します。
    ABAddressBookRequestAccessWithCompletion関数は、アクセスの許可または拒否をユーザに尋ねている間はアプリケーションをブロックしません。
    アクセスが許可されるまで、ABAddressBookRefオブジェクトには連絡先が含まれず、連絡先の修正を試みてもkABOperationNotPermittedByUserErrorエラーで失敗します。
    ユーザは最初にアクセスを要求する場合のみ伺いを求めます。
    以降のABAddressBookCreateWithOptionsの呼び出しには既存の許可を使用します。
    完了ハンドラは任意のキューで呼び出されます。
    ABAddressBookRefオブジェクトがアプリケーション全体で使用されている場合、全ての処理はスレッドセーフな方法でABAddressBookRefを使用するために同じキューにディスパッチされる必要があります。

  • アクセス許可状態のチェック

    アプリケーションは連絡先、カレンダー、リマインダー、またはフォトライブラリにアクセスできるかどうかをチェックするための、許可状態APIを使用することができます。
    このAPIは要求アクセスAPIから独立しており、ユーザにアクセスを許可または拒否するかを尋ねません。
    このAPIを使用するアプリケーションは、データクラスにアクセスするUI要素の表示を調整することができます。
    例えば、連絡先へのアクセスが許可または決定されていない場合、連絡先を選択するためのUIボタンを表示することができます。

    Address Bookの場合は、ABAddressBookGetAuthorizationStatus関数を呼び出します。
    Event Kitの場合は、EKEventStoreauthorizationStatusForEntityType:クラスメソッドを呼び出します。
    Assets Libraryの場合は、ALAssetsLibraryauthorizationStatusクラスメソッドを呼び出します。
    返される状態値の意味は以下の通りです。

    • Authorization Status Not Determined(許可状態が決定されていない)
      このアプリケーションがデータクラスにアクセスできるかどうかについて、まだ選択が行われていません。

    • Authorization Status Restricted(許可状態が制限されている)
      このアプリケーションはデータクラスへのアクセスが許可されていません。
      おそらく適切なペアレントコントロールなどのアクティブ制限のため、ユーザがこのアプリケーションの状態を変更することができません。

    • Authorization Status Denied(許可状態が拒否されている)
      ユーザが明示的にこのアプリケーションのデータクラスへのアクセスを拒否しています。

    • Authorization Status Authorized(許可状態が許可されている)
      このアプリケーションはデータクラスへのアクセスを許可されています。


●オーディオ

  • iOS 6から、アプリケーションはCoreMIDIのMIDISourceCreateMIDIDestinationCreate関数を使用するために、それらのUIBackgroundModesでオーディオキーを持つ必要があります。
    キーセットが無い場合、これらの関数はkMIDINotPermitted (-10844)を返します。


●Bonjour

  • NSNetServiceクラスとCFNetService APIは、デフォルトでP2Pインターフェイスを含んでいません。
    P2Pインターフェイスを介してサービスを閲覧、登録、または決定するには、アプリケーションが下記のBonjour DNSService*() APIを使用する必要があります。

  • 以下のAPIでkDNSServiceInterfaceIndexAnyにinterfaceIndexパラメータを設定すると、デフォルトではP2Pインターフェイスを含みません。
    P2Pインターフェイスを含めるには、kDNSServiceInterfaceIndexAnyを使用する時にkDNSServiceFlagsIncludeP2Pフラグを設定するか、kDNSServiceInterfaceIndexP2PにinterfaceIndexを設定する必要があります。
    影響を受けるAPIは次の通りです。

    • DNSServiceBrowse
    • DNSServiceRegister
    • DNSServiceResolve
    • DNSServiceRegisterRecord
    • DNSServiceQueryRecord


●Core Image



●Event Kit

  • カレンダーまたはリマインダーへのアクセスを要求する場合、

    ユーザはアプリケーションごとにイベントやリマインダーのデータへのアクセスを、許可または拒否することができます。
    イベントおよび(または)リマインダーのデータへのアクセスを要求するには、EKEventStorerequestAccessToEntityType:completion:メソッドを呼び出します。
    アクセスの許可または拒否をユーザに尋ねている間はアプリケーションをブロックしません
    アクセスがエンティティ型の許可を得るまで、イベントストアはエンティティ型のカレンダーを含まず、データの保存を試みると失敗します。

    ユーザは最初にアクセスを要求する場合のみ伺いを求めます。
    以降のEKEventStoreインスタンス化は既存の許可を使用します。
    完了ハンドラは任意のキューで呼び出されます。


●Game Center

  • ランドスケープ専用のアプリケーションでの(Game Centerのログイン画面などの)ポートレート専用のビューコントローラの呼び出しは、アプリケーションがクラッシュする原因となります。

    回避策:

    1. アプリケーションはapplication:supportedInterfaceOrientationsForWindow:デリゲートメソッドの提供し、ポートレートが返されるマスク値の一つであることを保証する必要があります。

    2. UINavigationControllerを伴う場合、UINavigationControllerをサブクラス化しsupportedInterfaceOrientationsをオーバーライドします。


●iCloud

  • iCloudアカウントを作成する時、任意の電子メールベースのApple IDまたは既存のiCloudアカウントを使用することができます。
    iCloudに移行しなかったMobileMeアカウントを持っていた場合、(以前のMobileMeのデータは存在しませんが)新規のiCloudアカウントにサインアップすることでApple IDを使用することができます。

    icloud.comの電子メールがwww.icloud.comから送信されることはありません。
    この時点で、icloud.comアドレスから電子メールを送信するためにウェブブラウザを使用したい場合、ユーザはhttp://beta.icloud.comに行く必要があります。

  • プロビジョニングプロファイルは、iOS プロビジョニングポータルでiCloudを有効にする必要があります。
    プロビジョニングプロファイルでiCloudを有効にすると、iOSプロビジョニングポータルのApp IDセクションに移動し、iCloud用にApp IDを設定します。
    iCloud用にApp IDを有効にした後、iCloud用にそれらを有効にするためにプロビジョニングプロファイルを再生成します。

  • NSMetadataQueryのsetSortDescriptors:メソッドはサポートされていません。

  • iOS 6では、Data Protectionを経由して保護されているファイルはiCloud Storage APIで使用することはできません。

  • OS Xではファイル名の大文字と小文字を区別しませんが、iOSでは区別します。
    iCloudを使用して2つのプラットフォーム間でファイルを共有すると、問題に繋がることになります。
    iOSでは、場合によってのみ異なる名前でファイルを生成することは避けてください。

  • iCloudドキュメントの協調読み込み操作の動作が変更されました。

    以前のiOSのリリースでは、アプリケーションがファイルまたはパッケージの協調読み込み操作を実行して、iCloudデーモンが利用可能なアイテムの新しいバージョンに気付いた時、アイテムの新しいバージョンがダウンロードされてディスクに書き込まれるまで協調読み込み操作はブロックされました。

    現在のiOS 6では、既に持っているローカルバージョンでファイルまたはパッケージの協調読み込み操作が開始された時、協調読み込みはできるだけ早く応じられ、新しいバージョンはバックグラウンドでダウンロードされます。
    この呼び出しは、ローカルに利用可能なファイルのバージョンを持っていない場合のみ、ダウンロードを判断するためにブロックされます。

    更にファイルが競合している時は、アプリケーションが利用可能なファイルを作成するために、ファイルの全ての競合敗者になるまでiCloudデーモンは待機しません。
    それらがすぐに利用できるように、競合したファイルの異なるバージョンを作成します。
    アプリケーションは、既存のファイルを協調して競合敗者がダウンロードされて利用可能になった時に通知されるUIDocumentのコールバックを使用することができます。


●iTunes

  • iTunes 10.6.3はiOS 6 SDKが必要です。

  • iOSの以前のパブリックベータ版はiTunes Matchの曲をダウンロードすることはできません。


●ロケーション



●マップ

  • iOS 6以降では、Map KitはAppleが主催する新しいインフラストラクチャ上に構築されています。

    以前のiOSリリースでは引き続きGoogleのサービスを使用しています。

    APIの互換性は維持されます(以下の既知の問題を参照)。

    マップは現在シミュレータでサポートされています。

    マップデータは徐々に進化していきます(高解像度衛星画像は一部のみ現在利用できます)。

  • 開発中にカバレッジファイルを指定しないルーティングアプリケーションは、常にマップ内にルーティングの検索結果が表示されます。

  • ルーティングアプリケーション用のカバレッジファイルのテストやデバッグは、XcodeのRunワークフローでの開発中でのみサポートされています。
    (スキームエディタのRunセクションのOptionsペインを使用して、Runスキームにカバレッジファイルを指定することができます。)
    デバイスに対して(App Store以外で)アーカイブされ配布されたアプリケーションは、アプリケーションのカバレッジファイルへのアクセスを持っていない可能性があります。

  • 開発者はMKMapViewの背面レイヤ上のrenderInContextへの呼び出しのためのコードを再考する必要があります(失敗した場合、アプリケーションがクラッシュする可能性があります)。
    これらの呼び出しがメインスレッドをオフにして行われた場合、削除するかメインスレッドに移動する必要があります。


●メディアプレイヤ

  • iOS 6では、UIWebView内でビデオやオーディオを再生する場合、サウンドオン/オフスイッチによってオーディオがサイレントになっていないことを、オーディオセッションに正確に設定する必要があります。
    ネイティブクラスを使用して再生した時、この動作はビデオとオーディオで一致します。


●Passbook

  • strip.pngがパスバンドルに含まれていない場合、パスはbackgroud.pngにフォールバックしません。

  • PKPassLibraryDidChangeNotificationのためのuserInfo辞書の内容が、削除されたパスの場合には変更されています。
    新しいuserInfoの辞書を確認するために最新のドキュメントを参照してください。

  • パスはその署名内にWWDR中間証明書を含める必要があります。
    証明書が省略されたパスは無効で、Passbookに追加することができません。
    この制限は以前のベータリリースでは施行されていませんでした。

  • RGBを使用するパスに含まれる画像は、アルファチャンネルを含める必要があります。


●セキュリティ

  • iOS 5では、MD5署名での証明書の署名はサポートされていません。
    SHA1またはSHA2に基づいた署名アルゴリズムを使用して署名されていることを確認してください。

  • iOS 6では、カレンダー、リマインダー、連絡先、写真のためのプライバシーコントロールが改善されています。

    アプリケーションがこれらのデータ型にアクセスしようとした時、ユーザにアクセスダイアログを表示します。
    ユーザは『設定』> 『プライバシー』でアクセスのオン/オフを切り替えることができます。

    開発者は単発的なデータの各クラスのために"purpose"文字列を設定することができます。
    データが要求されている理由をユーザが理解できるように、iOSはこの文字列を表示します。
    これらの文字列はXcodeのプロジェクトエディタのInfoタブを使用して追加することができます。
    関連するキー名は『Privacy -』で始まる文字列です。

    この機能を使用して開発者を支援するために、Event KitとAddress Bookフレームワークに変更が加えられています。


●共有フォトストリーム

  • iOS 6 beta 1から新しいリリースに更新する時、共有フォトストリーム機能はOFFに設定されています。
    デフォルトの設定はONにする必要があります。


●シミュレータ

  • 写真、連絡先、カレンダー、リマインダーにアクセスするアプリケーションにおいて、iOS Simulatorではプライバシー警告は表示されません。

  • このリリースでは、iOS SimulatorはIn-App Purchaseのテストをサポートしていません。
    この機能を使用しているアプリケーションをテストするには、デバイスを使用してください。

  • シミュレータ上でMP3音声を再生を試みる時、音飛びする場合があります。


●ソーシャル



●ステータスバー

  • 現在アプリケーションのInfo.plistファイル内でステータスバーの色パラメータを設定できます。
    ステータスバーの色と、起動中のアプリケーションのナビゲーションバーの色との一致を確実にするために、これを行うことができます。
    ステータスバーの色を設定するには、Info.plistファイルにUIStatusBarTintParametersキーを追加します。
    このキーの値は、アプリケーション起動時のナビゲーションバーを記述する適切な値を持つ辞書です。
    辞書内では、これも辞書の値であるUINavigationBarキーにする必要があります。
    その辞書には(Styleキーで)初期ナビゲーションバーのスタイルが含まれており、(Translucentキーで)半透明であるかどうかを示します。
    また(TintColorキーで)色、もしくは(BackgroundImageキーで)カスタムの背景画像の名前で、ナビゲーションバーの色を指定することができます。


●UIKit

  • iOS 5.1では、UISplitViewControllerクラスが(以前はメールでのみ見られた)左ビューを表示する際のスライド表示スタイルを採用しています。
    このスタイルはデリゲートメソッドで提供された既存のバーボタンアイテム、または右ビュー内でのスワイプジェスチャのいずれかによって表示が開始された時に使用されます。
    追加APIの採用はこの動作を得るために必要ではなく、(デリゲートによって提供されているUIPopoverControllerのインスタンスを含む)全ての既存のAPIは以前のように引き続き動作します。
    アプリケーションでジェスチャを採用できない場合、ジェスチャを無効にするためにスプリットビューコントローラのpresentsWithGestureプロパティをNOに設定します。
    ただしジェスチャを無効にすると、全てのアプリケーションで一貫したユーザ体験を保持する使用法を妨げるため推奨しません。

  • iOS 6では、Gesture Recognizerでの一本指やシングルタップのメソッドの実装やデリゲートの設定は必要が無いような変更が導入されています。
    これはUIControlオブジェクトで上手く動作させることになります。

  • iOS 6以降では、UIWebViewクラスは非同期でコンテンツを描画します。

  • 自動回転はiOS 6で変更されています。
    iOS 6ではUIViewControllershouldAutorotateToInterfaceOrientation:メソッドは推奨されていません。
    そこではsupportedInterfaceOrientationsForWindow:shouldAutorotateメソッドを使用する必要があります。

    その他の責任はアプリケーションとアプリケーションデリゲートに移行されています。
    現在、(UINavigationControllerなどの)iOSのコンテナは自動回転するかどうかの決定に、その子を考慮に入れていません。
    デフォルトでは、アプリケーションとビューコントローラのサポートしているインターフェイスの向きは、iPadイディオムではUIInterfaceOrientationMaskAll、iPhoneイディオムではUIInterfaceOrientationMaskAllButUpsideDownに設定されています。

    アプリケーションがサポートするインターフェイスの向きは時間の経過とともに変更することができるのと同じく、ビューコントローラがサポートするインターフェイスの向きも時間の経過とともに変更することができます。
    デバイスが回転する度、またはビューコントローラがフルスクリーンのモーダルプレゼンテーションスタイルが表示する度に、システムはサポートされているインターフェイスの向きのために最上位のフルスクリーンのビューコントローラ(通常はルートビューコントローラ)を要求します。
    更に、このビューコントローラがshouldAutorotateメソッドからYESを返した場合のみ、サポートされている向きが取得されます。
    システムは、回転させるかどうかを判断するために(Info.plistファイル、またはアプリケーションデリゲートのapplication:supportedInterfaceOrientationsForWindow:メソッドによって決定されている)アプリケーションがサポートしている向きと、ビューコントローラがサポートしている向きを交差します。

    システムは最上位のフルスクリーンコントローラのsupportedInterfaceOrientationsメソッドによって返される値と、アプリケーションのsupportedInterfaceOrientationsForWindow:メソッドによって返される値を交差することによって、サポートされている向きかどうかを判断します。

    setStatusBarOrientation:animated:メソッドは完全に廃止されていません。
    現在は最上位のフルスクリーンビューコントローラのsupportedInterfaceOrientationsメソッドが0を返した場合のみ動作します。
    呼び出し側がステータスバーの向きが一致していることを保証する責任を負います。

  • willRotateToInterfaceOrientation:duration:willAnimateRotationToInterfaceOrientation:duration:、そしてdidRotateFromInterfaceOrientation:メソッドは、presentViewController:animated:completion:などで自身でフルスクリーンのプレゼンテーションを行うビューコントローラ上で呼び出されることはありません。

    アプリケーションがサブビューのレイアウト管理にこれらのメソッドを使用していないことを確認してください。
    代わりに、ビューコントローラのviewWillLayoutSubviewsメソッドを使用し、ビューの境界矩形を使用してレイアウトを調整する必要があります。

  • iOS 6では、UIViewControllerviewWillUnloadviewDidUnloadメソッドは非推奨になっています。
    データの解放にこれらのメソッドを使用していた場合、代わりにdidReceiveMemoryWarningメソッドを使用してください。
    また使用していなかった場合、ビューコントローラのビューへの参照を解放するために、このメソッドを使用することができます。
    これを行う前にビューがウィンドウに無いことをテストする必要があります。

  • attributedTextプロパティが有効な属性文字列を含んでいる場合、UILabelオブジェクトのshadowOffsetまたはshadowColorプロパティの値の設定はサポートされていません。
    代わりに、影を設定するための属性文字列のNSShadowAttributeName属性を使用してください。

  • 互換性の問題のため、NSBaselineOffsetAttributeName属性はiOS 6でサポートされていません。

  • NSTextAlignmentNatural値はサポートされていません。
    UILabeltextAlignmentプロパティで使用されている、またはNSStringdrawInRect:withFont:lineBreakMode:alignment:メソッドにalignmentパラメータとして与えられている時、例外が発生します。

  • UIViewsetContentStretch:は非推奨になりました。
    同じ効果を得るには、UIImageresizableImageWithCapInsets:メソッドを使用し、UIImageViewで画像を表示してください。

  • UIImageresizableImageWithCapInsets:メソッドはタイリングによって効果的にサイズ変更します。
    できるだけ効果的に実行するため、単一の列や行が伸縮されている時など、ユーザが違いを見分けることができない時はタイリングではなく伸縮を使用します。
    ただし特定の状況下では、ユーザが画像の一部を実際に伸縮したい場合があります。
    iOS 6では、resizableImageWithCapInsets:resizingMode:メソッドで呼び出し側がタイリングまたは伸縮のサイズ変更モードを指定することができます。

  • UICollectionViewLayoutクラスが変更されました。

    クラスは現在回転中に生成したアニメーションのカスタマイズをサポートします。
    挿入や削除のアニメーションをカスタマイズするためのメソッド名も変更されており、同じフックは挿入や削除のためだけでなく回転のために使用することができます。

    クラスはいくつかのメソッド名を変更しました。
    具体的には、デコレーションビューは『再使用識別子』によってではなく『要素の種類』によって参照されます。
    デコレーションビューを使用しているアプリケーションは、コードを修正し、これに対応するために再構築する必要があります。

  • UILabelのビューの下端は、現在ベースラインとは異なります。

    以前のAuto Layoutは、UILabelの下端とそのベースラインは同じとして解釈していました。
    多くの場合では便利ですが、あるラベルの上端に別の下端が配置された場合に問題が発生しました。
    このようなシナリオでは、下のラベルは上のラベルの重なることになり、上のラベルのディセンダが下のラベルのアセンダを壊す可能性がありました。
    現在のAuto Layoutは、(ラベルが本質的なコンテンツのサイズよりも大きくないと仮定した)テキストボックスの底としてUILayoutAttributeBottomが、テキストのベースラインとしてUILayoutAttributeBaselineが解釈されます。
    既に底や中心点に応じてラベルをレイアウトするためのコードを生成している場合には、テキストを周辺に少し移動し、その制約を調整する必要があります。

  • iOS 6 betaの以前のバージョンを使用して構築された、nibまたはストーリーボードにテーブルビューを持つアプリケーションは、beta 3以降でクリーンビルドする必要があります。

  • UIScrollView用のAuto Layoutのサポートに関して、いくつかの注意事項があります。

    一般的に、Auto Layoutはvisibleの端となるビューの上下左右の端を考慮します。
    つまり、そのスーパービューの左端にビューを固定する場合、実際にはスーパービューの境界の最小x値に固定します。
    スーパービューの境界の原点を変更しても、ビューの位置は変更されません。

    UIScrollViewクラスは境界の原点を変更することによって、そのコンテンツをスクロールします。
    Auto Layoutでこの作業を行うには、スクロールビューの上下左右の端が現在そのコンテンツビューの端を表すことになります。

    スクロールビューのサブビュー上の制約は、スクロールビューのコンテンツサイズとして解釈され、満たすためのサイズにする必要があります。
    (これはAuto Layoutで使用するintrinsicContentSizeメソッドと混同してはいけません。)
    Auto Layoutでのスクロールビューのframeのサイズに、制約はスクロールビューの幅と高さに関して明示的であるか、スクロールビューの端がそのサブツリーの外側のビューに接続する必要があります。

    スクロールビューのスーパービューなど、スクロールビューのサブツリーの外側のビューとビューの間に制約を作成することによって、他のスクロールするコンテンツ上に(スクロールしない)浮いたように見えるスクロールビューのサブビューを作成できることに注意してください。

    ここではスクロールビューを構成する方法のいくつかの例を示します。

    • 混合アプローチ:

      1. スクロールビューの外側に制約を持つスクロールビューの位置とサイズ、つまりtranslatesAutoresizingMaskIntoConstraintsプロパティがNOに設定されています。

      2. コンテンツを持たせたいサイズのスクロールビューのため、普通のUIViewのコンテンツビューを生成します。
        スクロールビューのサブビューを作成しますが、自動サイズ変更マスク変換の制約は継続させます。

        UIView *contentView = [[UIView alloc]
            initWithFrame:CGRectMake(0,0,contentWidth,contentHeight)];
        [scrollView addSubview:contentView];
        // DON'T change contentView's translatesAutoresizingMaskIntoConstraints,
        // which defaults to YES;

      3. コンテンツビューのサイズに合わせてスクロールビューのコンテンツサイズを設定します。

        [scrollView setContentSize:CGMakeSize(contentWidth,contentHeight)];

      4. コンテンツビューの内側に入れるビューを生成し、コンテンツビュー内でそれらを配置するように制約を設定します。

        あるいはまたスクロールビュー内に行くビューのサブツリーを作成し、制約を設定し、コンテンツビューやスクロールビューのcontentSizeプロパティで使用するサイズを見つけるために(UILayoutFittingCompressedSizeオプションで)systemLayoutSizeFittingSize:メソッドを呼び出すことができます。

    • 純粋なAuto Layoutのアプローチ:

      1. 関連する全てのビューでtranslatesAutoresizingMaskIntoConstraintsをNOに設定します。

      2. スクロールビューの外側に制約を持つスクロールビューの位置とサイズ。

      3. スクロールビュー内のサブビューのレイアウトに制約を使用するには、制約がスクロールビューの4つ全ての端と連携することと、それらのサイズを取得するためにスクロールビューに依存しないことを確認します。

        簡単な例では、画像のサイズから取得した固有のコンテンツサイズを持つ大きなイメージビューになります。
        ビューコントローラのviewDidLoadメソッドには、以下のようなコードが含まれます。

        UIScrollView *scrollView = [[UIScrollView alloc] init];
        UIImageView *imageView = [[UIImageView alloc] init];
        [imageView setImage:[UIImage imageNamed:"MyReallyBigImage"]];
        [self.view addSubview:scrollView];
        [scrollView addSubview:imageView];

        scrollView.translatesAutoresizingMaskIntoConstraints = NO;
        imageView.translatesAutoresizingMaskIntoConstraints = NO;

        NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(scrollView,imageView);
        [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView]|" options:0 metrics: 0 viewsDictionary:viewsDictionary]];
        [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView]|" options:0 metrics: 0 viewsDictionary:viewsDictionary]];
        [scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[imageView]|" options:0 metrics: 0 viewsDictionary:viewsDictionary]];
        [scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[imageView]|" options:0 metrics: 0 viewsDictionary:viewsDictionary]];


        これは(デバイスの向きなどで)ビューコントローラのビューのサイズが変更され、イメージビューがスクロールするサブビューになるようなスクロールビューを与えます。
        スクロールビューのコンテンツサイズ設定する必要はありません。

  • ランドスケープ専用のアプリケーションで(Game Centerのログイン画面などの)ポートレート専用のビューコントローラを呼び出すと、アプリケーションがクラッシュします。

    回避策:

    1. アプリケーションはapplication:supportedInterfaceOrientationsForWindow:デリゲートメソッドの提供し、ポートレートが返されるマスク値の一つであることを保証する必要があります。

    2. UINavigationControllerを伴う場合、UINavigationControllerをサブクラス化しsupportedInterfaceOrientationsをオーバーライドします。


●WebKitとSafari

  • http://www.w3.org/TR/animation-timing/で説明されているように、iOSのWebKitは現在、JavaScriptでrequestAnimationFrameとcancelAnimationFrameメソッドをサポートしています。

    仕様はWorking Draft状態のままであり、これらのメソッドはwebkitの接頭辞を持っていて、window.webkitRequestAnimationFrameとwindow.webkitCancelAnimationFrameであることに注意してください。

  • デフォルトでアプリケーションのキャッシュ割り当ては5MBから25MBに増加しています。

  • JPEGのサブサンプリングの閾値は、iPhone 3GSとiPod touch(第4世代)を除く全てのサポートされているハードウェアで2MP(メガピクセル)から5MPに増加しています。

  • サポートにウェブフォームでの<input type="file">タグが追加されました。
    ユーザはフォトライブラリから既存の写真やビデオをアップロードしたり、カメラを使用して写真やビデオを撮ることができます。
    以前はこのフォームコントロールは常に無効になっていました。

  • OS XでのSafari 6.0では、現在iOSデバイスとiOS Simulator接続できるWeb Inspector(ウェブ開発ツール)を開発者が使用することができます。
    開発者はSafariとXcodeから構築し実行する独自のアプリ内のUIWebViewクラスでデバッグするために、Web Inspectorを使用することができます。
    これはSafariのDebug Consoleに置き換えられます。

  • iOS 6以降では、UIWebViewオブジェクトからウェブデータ(SQL Web StorageとLocalStorage)をバックアップするディレクトリに格納することができます。
    このデータをバックアップできるようにするには、アプリケーションのユーザデフォルトでWebKitStoreWebDataForBackupキーを設定します。
    アプリケーションが再読み込みできないウェブコンテンツデータに依存している場合のみ、これを行う必要があります。
    UIWebViewオブジェクトが任意のウェブコンテンツへのリンクを開く場合、このキーはNOに設定する必要があります。
    このキーの値をトグルすると、既存のウェブビューデータを保存しません。

  • iOS 6以降では、Safariは最早一般的なfeed: RSS/ATOMスキームを登録しません。
    これらのフィードの型を見ることができるアプリケーションは、URLスキーム用に登録することを勧めます。

  • WebKitは-webkit-transform: preserve-3dオプションを伴う要素のハードウェアアクセラレーションのレイヤを常に生成します。
    著者はハードウェアアクセラレーションを取得するための方法として、このオプションの使用を停止する必要があります。

  • iOS 6現在、http://www.youtube.com/watch?v=oHg5SJYRHA0形式で埋め込まれたYouTubeのURLは動作しません。
    これらのURLはYouTubeサイト上でビデオを見るためのもので、ウェブページ内に埋め込むためではありません。
    代わりに、https://developers.google.com/youtube/player_parametersで説明されている形式を使用する必要があります。

  • iOS 6では、keyboardDisplayRequiresUserActionプロパティはUIWebViewクラスに追加されています。
    プロパティはデフォルトではYESで、形式要素でfocus()を呼び出すとキーボードを表示しないことを意味します。
    プロパティをNOに変更することによって、JavaScriptが形式要素でforcus()を呼び出すと要素にフォーカスし、キーボードは自動的に表示されます。

  • iOS 6現在、ウェブアプリケーションで形式要素上でfocus()を呼び出すと要素を割り当てます。



参考文献

Apple/iOS SDK Release Notes for iOS 6

0 CommentsPosted in 資料





SoundSport Pulse wireless headphones
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
04 | 2017/05 | 06
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

SoundSport Pulse wireless headphones
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