Xccode 7 公開ノート
Xcode 7.1 公開ノート
新機能
プレイグラウンド
- プレイグラウンドは、オブジェクト.リテラルを作成するために、直接エディタにファイル、イメージ、および色をドラッグするのをサポートしています。
オブジェクト.リテラルを使用すると、より表現に富んだプレイグラウンドの文書を可能にする、プレイグラウンド内のファイル、イメージ、色の視覚的表現を含めることができます。リテラルは、そのプレーン・コードの対応するものと同様に動作しますが、Xcode のエディタで特別にレンダリングされます。(22099316)
- XCPlayground によってエクスポーズされた API は大幅に改訂されました。グローバル関数のコレクションの代わりに、Xcode は Xcode と現在のプレイグラウンドのページと対話するためのメソッドを持つ XCPlaygroundPage クラスを公開します。
- 現在のページへの参照を取るために XCPlaygroundPage.currentPage を使用してください。
- タイムラインの項目に値をキャプチャするために XCPlaygroundPage.captureValue(_:withIdentifier:) を使用して下さい。
- プレイグラウンドのページが無期限に実行することを目的とする非同期コードを含むことを Xcode に示すために XCPlaygroundPage.needsIndefiniteExecution を設定して下さい。
- プレイグラウンドのページのライブビューを提示するため、Xcode に伝えるために XCPlaygroundPage.liveView を設定して下さい。
- XCPlayground はプレイグラウンド・ページのライブビューとしてビューコントローラを提示する事をサポートしています。
- プレイグラウンドがプログラム上で XCPlaygroundPage.currentPage.finishExecution() を呼び出すことで実行を停止できます。
XCPlaygroundPage は、次の機能をエクスポーズします。
XCPlaygroundSharedDataDirectoryURL は新しいグローバル定数として定義されています。それは NSURL として共有されたプレイグラウンド・データディレクトリをエクスポーズします。
この API の変更の一環として、XCPCaptureValue、XCPShowView、XCPSetExecutionShouldContinueIndefinitely、XCPExecutionShouldContinueIndefinitely、および XCPSharedDataDirectoryPath が旧式となりました。それらは、Xcode の将来のバージョンで削除される場合があります。(20783204)
この機能を使用するには、選択したあなたのビューコントローラに XCPlaygroundPage.liveView を設定します。利用可能な場合、ビューコントローラが好まれるはずですが、プレーンビューはまだプレイグラウンド・ページのライブビューとして使用することができます。
プレイグラウンドの作者は、オブジェクトまたは値がそのライブビューの表現として使用されるべきビューまたはビューコントローラを返すことができ、XCPlaygroundLiveViewable プロトコルに準拠することによりプレイグラウンド・ページのライブビューとして提示することができるカスタム・タイプを作成できます。(20783161)
このメソッドは、現在のプレイグラウンド・ページの実行を停止するように Xcode に指示します。それは、Xcode が直接終了しないような方法で適切に終了するためにクリーンアップできます。(22463694)
Interface Builder
- ダッシュボードの制約は、1000 よりも低い優先度を示します。(15990914)
- Interface Builder は セゲエのピーク&ポップを有効にする事をサポートしています。
iOS 9.1 より前のバージョンの OS 上で動作しているときには、セゲエのピーク&ポップは無視されます。(22886994)
テスト
- UI テストは tvOS アプリで利用可能です。
tvOS が提供するユニークな対話モデルをサポートするために、XCTest は、Apple Remote が使用されたかのように、アプリとの相互作用を可能にする新しい XCUIRemote クラスを含んでいます。さらに、新しい XCUIElement.hasFocus プロパティは、要素のフォーカス状態をチェックするために使用することができ、XCUIElementQuery がフォーカスを持つ要素を見つけることが tvOS で断定され、この hasFocus プロパティも使用できます。
tvOS 上で UI テストを記録しながら、Siri Remote 上のスワイプジェスチャーは、同等のボタンが、Apple Remote で押されたかのように記録されます。
シミュレータでのキーボードを使ったナビゲーションは、同等のボタンが、Apple Remote で押されたかのように記録されます。矢印キーは、矢印ボタンにマッピングされ、Return キーは[選択(Select)] ボタンにマッピングされ、[Escape(エスケープ)] キーは、[メニュー(Menu)] ボタンにマッピングされ、スペースバーは、[再生/一時停止] ボタンにマッピングされます。(21548564)
デバッグ
- アドレス清浄化は watchOS アプリをサポートしています。(22540994)
- Swift エラーブレークポイントがサポートされています。
エラーが throw されると、Swift エラーブレークポイントは、実行を一時停止します。その実行は、指定の Swift のエラータイプのためにのみ一時停止するように、Swift エラーブレークポイントを編集できます。(21080569)
クラッシュレポート
- Xcode は WatchKit 2 拡張機能から生じるクラッシュレポートをクラッシュオーガナイザーで表示できます。(20139117)
- OS X アプリの拡張機能のクラッシュログはクラッシュオーガナイザーに表示されます。(22224732)
Swift
- C からインポートした列挙型は、== 演算子のデフォルトの実装を含む、Equatable プロトコルに自動的に準拠しています。
- Objective-C と、その名前に "unsigned.." を NSUInteger 型を使用する他のメソッドおよびプロパティと同じように、Int の代わりに UInt 型を NSNumberunsignedIntegerValue プロパティは今や、持っています。
- ゲッターとセッターフィールドは今や、C から輸インポートされたユニオンという名前でさという名前で作成されています。さらに、フィールドの名前の付いたパラメータを持つ初イニシャライザーが提供されます。
- C 構造体のビットフィールドメンバは、今や Swift にインポートされています。(21702107)
- dispatch_block_t 型は今や Swift 1.2 で行ったように、@convention(block) () -> Void 型を参照しています。
- ファイルの編集は、宣言が private でマークを付けて変更しただけの場合、それに依存するファイルの再コンパイルをトリガーしません。(22239821)
- 文字列の補間式は今やの文字列リテラルが含められます。
- 多くの場合、その制約システムが改善し続けようとすると、型チェッカーが、解決することはできない場合、エラーメッセージが生成します。
- 関数型の間の変換はサポートされており、関数のパラメータの型で関数結果の型と共分散と反分散を示しています。
この適合性で、あなたが追加のコード無しで switch 文での C の列挙型パターンマッチングを使用できます。(17287720)
NSUInteger のシステムフレームワークにおける他のほとんどの用途は、Xcode 7であったように、int としてインポートされます。(19134055)
たとえば、次の Objective-C の typdef が与えられたら:
typedef union IntOrFloat { int intField; float floatField; } IntOrFloat;
Swift にこの tgypedef をインポートすると、次のインタフェースを生成します。
struct IntOrFloat { var intField: Int { get set } init(intField: Int) var floatField: Float { get set } init(floatField: Float) }
(19660119)
この変更は、Swift 2.0 と Xcode 7.0 で表面化した問題を解決する、予想通り dispatch_block_create を使用するプログラムが動作するようになります。
(22432170)
例えば、"My name is \(attributes["name"]!)" は今や有効な式です。(14050788)
例えば、汎用クロージャの本体内のエラーは、(たとえば、引数のクロージャーを map に) はるかに便利に診断されます。(18835890)
例えば、Ant -> Int 型の関数を String -> Any 型の変数に割り当てることは合法です。(19517003)
解決済みの問題
- 以前の Xcode のリリースノートに記載された以下の問題が解決されました。
- 解決済み:[エディタ(Editor)] > [キャンバス(Canvas)] >「組み込みサイズの制約をあいまいになる原因を表示(Show Intrinsic Size Constraints Contributing To Ambiguity)」が Interface Builder のキャンバスで自動レイアウトを使用して、選択したビューのコンテンツの優先順位であいまいさがある場合に正しく動作します。(19689060)
- 制約は、彼らの関係や比率を示すためにバッジを示します。(15991257)
- Interface Builder で UIStackView に設定された明示的なレイアウトの余白は正しく実行時に反映されます。(21613035)
Interface Builder
ビルド
- 解決済み:あなたの iOS アプリが watchOS アプリを埋め込んでいて、各アプリに埋め込まれた iOS と watchOS 両方のフレームワークを持っていた場合、あなたのプロジェクトは、アーカイブのアクションを実行したときにビルドする時に失敗していました。(22183332)
デバッグ
- ビュー階層のデバッグ時選択した制約の視認性が向上しました。(22092490)
一般
- Xcode や、シミュレータを使用する他のツールを起動しても、もはや追加の Apple ウォッチデバイスが作成される事はありません。(22508374)
Swift
- as パターンで、複数の種類に対して、switch を使用しても、もはやメモリリークが発生しません。(22587077)
既知の問題
アセットカタログ
- watchOS 2.0 のアセットカタログをビルドする場合、いくつかのユニバーサルアセットは、コンパイルされたアセットカタログには表示されない場合があります。
watchOS 2.0 のあなたのユニバーサルアセットが"2x" または"Any" スケール表現を含んでいることを確認して下さい。(22867369)
リンカ
- ビットコードと -exported_symbol または -exported_symbols_list 一緒に ld-r (Xcode の単一のオブジェクトプレリンク) を使用する場合、単一のオブジェクトのプレリンクは成功しますが、プレリンクオブジェクトに対してリンクする際、リンカは、その後アサートします。
あなたはビットコードと単一のオブジェクト・プレリンクを使用して静的ライブラリをビルドする場合、リンクコマンドにエクスポートされたシンボルフラグを追加しないでください。サードパーティのライブラリをリンクするときに、現在のリンカーアサーションを見ている場合は、ビットコードを無効にするか、ライブラリプロバイダから新しいライブラリを求めることができます。(22897234)
シミュレータ
- tvOS シミュレータで Siri のリモコンを使用するには、Apple TV から最初に登録解除する必要があります。
- Siri リモコンまたはゲームコントローラをペア解除する時、Simulator.app が応答しなくなることがあります。
- シミュレータで実行している場合、アプリは Mac のローカルな IP アドレスを経由して Mac でローカルにホストされている TCP/IP サービスと通信できません。
- シミュレータの Apple ペイを使用してシミュレートされた処理は、ユーザーの請求先住所を要求する場合は完了しません。(22551685)
- フルサポートの場合、tvOS シミュレータ実行時環境には、OS X の v10.11 El Capitan の最終リリースまたは OS X の 新しいバージョンが必要です。
- Xcode.app が、デバイスが最初に起動したときとは異なるパスにある場合、iOS 9.0 シミュレータは黒い画面で起動することがあります。
- Xcode のダウンロード設定パネルから1つ以上のシミュレータをダウンロードするときは、最初のダウンロードの開始時に管理者の承認のプロンプトが表示されます。また、各ダウンロードの終了時に、再び管理者の承認のプロンプトが表示されることがあります。これらのすべてのプロンプトに正常に応答する事が選択されたシミュレータを成功裏にインストールするのに必要です。(22993731)
Apple TV から Siri のリモコンを登録解除するには、 Apple TVのリモコンから数メートル離れて位置し、MENU と + を同時に2秒間押し続けます。Siri がすぐに再度ペアになった場合、さらに離れて、再試行してください。(22908351)
Simulator.app を強制終了して再起動して下さい。(22891830)
localhost または 127.0.0.1 のように、ループバックアドレスを経由して接続して下さい。(22453539)
実行時環境は、OS X Yosemite 10.10.5 で限られた機能がサポートされています。OS X Yosemite で実行すると、tvOS シミュレータ実行時環境と Apple TV のリモコンをペアリングすることができません。(19070665)
シミュレーターメニューから、シミュレートされたデバイスの内容と設定をリセットして下さい。(22697818)
テスト
- tvOS の UI テストを記録する場合、メニューボタンを押すのは、UI テストメソッド内に重複するコードを生成することがあります。(22850293)
- UI テストは、ユニットテストと実行すると、Apple TV のシミュレータで起動に失敗します。
あなたのユニットテストとは別に、独自のスキームを使用して、UI テストを実行して下さい。(23079718)
デバッグ
- [通知(Notification)] タブが選択されたときに、Xcode のデバッガは自動的に iPad Pro で実行する Today 拡張子に添付しません。
- Apple TV のアプリからデバッガを外すと、それが出力をログに記録するときにアプリがハングアップする原因になります。(22493459)
- CGRect と CGPoint のように、C 言語の構造体の型から Swift にインポートされた Swift のデータ型は、デバッガで検査することはできません。(23088739)
[今日(Today)] タブを選択し、デバッグのため Today 拡張子を起動して下さい。(22495840)
クラッシュレポート
- アプリの機能拡張のクラッシュログは、TestFlight を介して配布されたビルドでは使用できません。(22661518)
Xcode サーバー
- Xcode サーバーはバージョン 4.1.5 以外の OS X サーバのバージョンと新開発チームに参加することができないかもしれません。
既存のチーム・メンバーシップは正常に動作し続けます。(22539804)
一般
- スキームアクションの実行で"起動待機" を使用する場合は、プロセスが起動するのを待機しているにもかかわらず、アクティビティモニタの"添付するのを待機中" の代わりに"実行中" と表示されます。プロセスが待機していたと起動しなかった場合は、"自動的に起動" に切り替えし、Xcode は期待どおりに起動した後、このような状況が発生した都度、アプリに添付することができませんでした。(22753642)
- [デバイス(Devices)] ウィンドウが時々不正確なコンパニオンデバイスと一緒にペアリングした時計の詳細を表示します。(22908731)
- ウォッチフレームワークと静的ライブラリのターゲットは、プロジェクトエディタの[一般(General)] タブがありません。
- 無料のプロビジョニングチームで署名したアプリを実行すると、起動に失敗することがあります。
- 無料のプロビジョニングチームで署名したアプリは tvOS デバイス上で実行できないことがあります。(22636412)
- Finder が誤って Xcode が損傷され、ゴミ箱に移動する必要があると警告を与える場合があります。
- ゲームセンターやアプリ内購入のような一部の機能は、プロジェクトナビゲータの[機能(Capabilities)] ペインで有効にすることができません。
- OS X プロジェクトをビルドした後、いくつかのラッピング、複数行のテキストフィールドは、実行中のアプリで間違ってレイアウトされることがあります。
必要に応じて、ターゲットの Info.plist ファイルまたは[ビルド設定] タブを介して、手動で設定を行って下さい。(22932248)
[デバイスの設定] - [設定(Setting)] > [一般(General)] > [プロファイルとデバイス管理(Profiles & Device Management)] の開発証明書を信頼して下さい。(19748857)
お使いの Mac を再起動して下さい。再起動後に警告が解決しない場合は、Xcode を再インストールして下さい。(22686310)
その他の機能を有効にする機能を復元するために iCloud の機能を一度無効にし、その後有効にして下さい。(22964531)
ラッピングや、複数行のテキストフィールドを含むストーリーボードまたは XIB を開き、テキストフィールドを選択したり、サイズインスペクタを開き、明示的に適切な幅に変更します。(23052169)
Xcode 7.0.1 リリースノート
アプリの軽量化
- Xcode 7.0.1 リリースは、ビットコードを採用するサポートを改善し、アプリは App Store に提出する前に軽量化すると、問題をキャッチするのを助けるため、いくつかの改良を含んでいます。(22783146、22783168)
Xcode 7.0 リリースノート
Xcode 7 のリリースでは、Swift と Objective-C への更新だけでなく、IDE の新しい機能が組み込まれています。
新機能
プレイグラウンド
- プレイグラウンドは、変更が行われただけでなく、実行中に停止されたときに、今は手動または自動で実行するように設定できるようになりました。(18058289)
- Xcode 7 はプレイグラウンドにページを追加します。 [ファイル(File)] > [新規プレイグラウンドページ(New Playground Page)] を選択することで、任意のプレイグラウンドに新しいページを追加できます。ナビゲーターとジャンプバーで、プレイグラウンドのすべてのページが表示できます。新しいページ・ナビゲーションのマークアップとページ間のナビゲーションを追加できます。
プレイグラウンドのすべてのページへの相対ナビゲーション:
    [最初のページへ](@first)
    [最後のページへ](@last)
現在のページへの相対ナビゲーション:
    [次ページへ](@next)
    [前ページへ](@previous)
特定のページへのナビゲーション:
    [概要へ移動](Overview)
    [ソートへ移動](Sorting)
(20192277)
Interface Builder
- Interface Builder は、新しい UIStackView (iOS 9) のオーサリング・サポートを追加し、NSStackView (OSX 10.11) の配布プロパティを公開します。キャンバスの右下に[スタック埋め込み表示(Embed in Stack View)] ボタンがあります。(18420765)
- Interface Builder は OS X のアプリの NSDateComponentsFormatter、NSDateIntervalFormatter、NSEnergyFormatter、NSMassFormatter、 および NSLengthFormatter のサポートを追加します。(17236851)
- Interface Builder のアイデンティティ・インスペクタからの注意は今や --export-string-file の出力に含まれており、XLIFF ファイルは、プロジェクトエディタのローカライズ機能のエクスポートを使用してエクスポートされます。(18023555)
- カスタムビューと他のコンテナの背景のプレースホルダは、[エディタ(Editor)] > [キャンバス(Canvas)] > [背景のプレースホルダの表示(Show Background Placeholders)] を選択して、Interface Builder のキャンバス上で非表示にできます。(20580948)
- ストーリーボードの参照は、今や iOS 8、OS X 10.10、および watchOS 1 に展開できます。
- Interface Builder は、今や他のストーリーボードでのシーンのプレースホルダ参照、ストーリーボードの境界を越えたセグエをサポートしています。(9565583)
後方に展開したストーリーボードの参照は関係のセグエに接続されておらず、外部のバンドルでストリーボードを参照しない場合があります。(21275172)
ビルドシステム
- Objective-C で生成されたインターフェイスヘッダー名 (SWIFT_OBJC_INTERFACE_HEADER_NAME) の新しいビルド設定は Objective-C の中の #import 文で使用するための Swift コンパイラによって生成されたヘッダに使用された名前を制御します。(18063617)
- Copy ヘッダーがビルドフェーズ中にあなたのヘッダーに unifdef ツールを実行するように Xcode を構成できます。これは、COPY_HEADERS_RUN_UNIFDEF ビルド設定で有効になっており、COPY_HEADERS_UNIFDEF_FLAGS ビルド設定で、渡されるフラグが制御されます。 使用:
- Xcode のビルドシステムは、もはや IDE で実行するときにアプリを起動するために使用される環境を自動的に継承しません。Xcode.app がコマンドラインから開かれている場合には、その必要ない再構築を防ぐことができます。
- 製品バンドル識別子 (PRODUCT_BUNDLE_IDENTIFIER) の新しいビルド設定がターゲットのバンドル識別子を設定することをお勧めの場所です。ターゲットの Info.plist は CFBundleIdentifier キーの値の $(PRODUCT_BUNDLE_IDENTIFIER) としてそれを参照することで、このビルド設定を使用するように構成する必要があります。
- あなたは、ターゲットエディタの[ビルドルール] タブで派生したソースファイルのファイルごとのコンパイラフラグを指定できます。これらは Xcode 7 以前の任意の Xcode で編集や表示はできませんが、これらのフラグは、Xcode 6.3 でも動作します。(5924168)
- ビルド中には、Xcode は、ビルドされている SDK のバージョンに対して説明するビルド設定を取り込みます。
- SDK_VERSION:使われている SDK の x.y バージョン。たとえば、OS X 10.10 では '10.10'、iOS 8 では '8.0' です。
- SDK_VERSION_ACTUAL:SDK のバージョンを表す単一の整数。たとえば、101000、または 80000 です。
- SDK_VERSION_MAJOR:SDK のメジャーバージョンを表す単一の整数。たとえば、101000 (これは、10.10.0 または 10.10.4 の値になります)、または 80000 (8.0 または 8.3 の値になります)。
- SDK_VERSION_MINOR:SDK のマイナーバージョンを表す単一の整数。例えば、1000 または 1004 (10.10.0 または 10.10.4 の場合)、または 0 または 300 (8.0 または 8.3の場合)。
$man unifdef
unifdef フラグが受け入れる詳細については、Terminal ウィンドウに表示されます。(18786269)
必要に応じて、ユーザーは Terminal で次のコマンドを入力することにより、以前の動作を選択できます。
$defaults write com.apple.dt.Xcode UseSanitizedBuildSystemEnvironment -bool NO
-UseSanitizedBuildSystemEnvironment= YES
をコマンドラインでも xcodebuild でバグのない環境を使用できます。
(20668232)
Xcode はあなたのターゲットが Info.plist ファイルを前処理しない限り、問題ナビゲータで "推奨設定にアップグレードせよ" というプロジェクトの近代化を受け入れたときに、あなたのためにこれを構成するために提供します。この場合、この設定を手動で構成する必要があります。この変更は、Xcode のの古いバージョンへの後方互換性です。
この変更は、あなたのターゲッットが、その Info.plist ファイルを前処理するならば、このようなオンデマンド・リソースのように特定の特徴に作用する必要があります。(20887827)
これらの設定は、以下のとおりです。
(20341285)
テスト
- Xcode 7 の UI テストはインストルメントの既存の UIAutomation のサポートの代替品として導入されています。(22345571)
デバッグ
- あなたがビュー階層をデバッグしている間、Xcode では、ビューをダブルクリックして、アプリの一部に集中できるようになります。
- OS X のアプリケーションを起動するときにインスツルメントは今や、透過的アプリケーション・ライフサイクルの自動終了機能を無効にするのをサポートしています。
- 最初にプロセスを選択した後、プロセス選択にて"編集{アプリ名}" メニュー項目を選択します。
- アプリ設定ウィンドウで内歯車のアイコンを選択します。
- "透過的アプリ・ライフサイクル-自動終了" セクションの下の[無効(Disable)] メニュー項目を選択します。
- あなたの iOS のアプリ拡張機能クラッシュから生ずるクラッシュオーガナイザーで Xcode クラッシュレポートを表示します。(19309974)
終了するには、デバッグナビゲータの[フォーカスインジケータ] の"X" をクリックするか、エディタの空白でダブルクリックして下さい。(18553133)
インストルメントが、OS X のアプリを起動したときに自動終了を無効にするには:
あなたがこのアプリ設定を構成すると、インストルメントは自動終了を無効にする追加のコマンドライン・オプションで OS X のアプリを起動します。設定は、そのアプリの起動の将来いつでも記憶されています。(18105188)
一般
- Xcode 7 は、あなたが[検索(Find)] > [プロジェクトで選択したシンボルを検索(Find Selected Symbol in Project)] で選択したシンボルを検索できます。(15573153)
- 検索ナビゲータは、発信者の階層を示します。関数やメソッドを選択し、右クリックして、"発信階層を検索" を選択します。(15716883)
- 検索ナビゲータは、一致するものを含む .strings ファイルの言語を表示します。(18372154)
- xcodebuild のユーザーのデフォルトドメインは com.apple.dt.xcodebuild に変更されました。
- xcodebuild は -hideShellScriptEnvironment オプションをサポートしています。
- アシスタントエディターは、あなたの Swift のクラスのインターフェイスの概要を取得できます。
- 生成されたインターフェイスモードにアシスタントエディターを設定すると、Objective-C のヘッダファイルの Swift のインタフェースが表示されます。(19320817)
xcodebuild は新しいものよりも低い優先度で古いユーザーのデフォルトドメイン (xcodebuild) からの読み出し続けます。(20181486)
このオプションは、各実行スクリプトビルド相のため設定した環境変数をリストするように Xcode を抑圧し、いくつかのプロジェクトの出力の冗長性を相当に削減します。(20309279)
主要エディタで Swift ファイルを示している時に、クラスの要約バージョンを、カウンターパートモードにアシスタントを設定し、doc コメントと一緒にあなたのファイル内のメソッドや関数の宣言 (ただし、実装) を含んで表示したとき。(17684981)
変更点
- App Store にアーカイブをエクスポートするには、iTunes Connect Access のアカウントが必要です。(19940553)
- ライブラリ検証を伴う Xcode 7 の複数コンポーネント実行は、悪意のあるコードによる悪用を防ぐために有効にしてあります。システムライブラリを介在し、または DYLD_INSERT_LIBRARIES を使用してプロセスに注入されているすべてのコードは、あなたが Xcode 7 を実行しているときに問題が発生する可能性があります。
あなたがシステムライブラリを介在するか、システムから DYLD_INSERT_LIBRARIES を使用してプロセスの中に注入されたソフトウェアを削除するか、または更新のためにこのようなソフトウェアのベンダーに連絡するかのいずれかをお勧めします。(22366994)
旧式
- OS X v10.11 は、以前に旧式となった実行時ガベージコレクションをサポートしている OS X の最新のメジャーリリースです。
- インストルメントの既存の UIAutomation サポートが旧式となりました。 Xcode 7 の UI テストを使用して下さい。(22345571)
ガベージコレクションに依存しているアプリまたは機能は、この実行時環境が削除されたときに正常に機能しないか起動しない場合があります。開発者は、自動参照カウント (ARC) またはメモリ管理のため retain/release を手動で行う必要があります。Xcode はこの移行を支援するためのツールを含んでいます。(20589595)
ノート
- OpenSSL のヘッダーは OS X v10.11 の SDK から削除されています。(21232069)
- OS X El Capitan はもはや genstrings 付属していません。そのユーティリティは、代わりに Xcode 7 によって提供されています。これは、OS X の旧バージョンの場合と同じようの Xcode の古いバージョンが、/usr/bin で genstrings を見つけることができないことを意味します。(19708961)
Swift
Swift 言語機能
- 新しい defer 文。この文は、新しいエラー処理モデルと組み合わせて特に有用な、スコープ(scope) が終了する時にクリーンアップコードを実行します。 例えば:
- 特定の列挙型の印刷は、もしあれば列挙型の case と payload を示します。これは @objc 列挙型または複数の payload を持つ特定の列挙型はサポートされていません。(18334936)
- @available() 属性を使用して、独自の宣言に利用可能性情報を指定できます。
- 新しい @nonobjc 属性が ObjC エクスポートを選択的に抑制し、それ以外はインスタンスメンバーが @objc になるようにために導入されます。(16763754)
- 非汎用クラスは今や、汎用クラスから継承できます。(15520519)
- 汎用型の public 拡張子は今や許可されています。
- 列挙型は今や、複数の汎用関連値をサポートしています。例えば:
- プロトコル拡張機能:拡張機能は、プロトコル型のために書くことができます。
- プロトコルのデフォルトの実装:プロトコルは"mixin" や"trait" のようなパターンを可能にする、プロトコル拡張機能で指定された要件のデフォルトの実装を持てます。
- 利用可能性チェック。あなたが現在選択した展開ターゲットよりも新しいオペレーティングシステムのバージョンで導入された API を呼び出す場合、Swift はコンパイル時エラーを報告します。
- C 関数ポインタのネイティブサポート:クロージャはそのローカルコンテキストのいずれをも捕捉してはならない制限で、クロージャまたはグローバル関数を使用して呼び出すことができる関数ポインタ引数を取る C 関数。
- エラー処理。Swift で、throw、catch、エラー管理する関数を作成できます。
- テスト容易性:Swift 2.0 フレームワークやアプリのテストは、内部ルーチンを public にすることなく書かれています。
- if 文はラベルされ、ラベルされた break 文は、一致する if 文のジャンプ先として使用できます。
- 新しい x? パターンは .Some(x) の同義語として optional に対し一致するてパターンとして使用できます。(19382878)
- 複数行にわたるものを含む Swift 文字列リテラルの連結は、-Onone であっても、今やコンパイル時の最適化が保証されます。(19125926)
- ネストされた関数は今や、再帰的に自分自身や他のネストされた関数を参照できます。(11266246)
- 改善された診断:
- 警告は、適切な場合、var の代わりに let の使用を奨励するために導入されました。
- 警告は、未使用の変数を通知するために導入されました。
- 無効な突然変異診断がより正確です。
- 到達不能な switch case は、警告の原因となります。
- switch 文"網羅性チェッカー" は、よりスマートになりました。
- Failable コンビニエンス・イニシャライザーは self.init を呼び出す前に、nil を返すことが許されています。
- 新しい readLine() 関数が標準ライブラリに追加されました。(15911365)
- SIMD サポート:Clang 拡張ベクトルは、インポートされ Swift で使用可能です。
- 新しい guard 文:この文を使用すると、範囲外への早期終了をモデル化することができます。
- パターンマッチングの改善:switch/case パターンマッチングは、以下を含む多くの新しい条件付き制御フロー文に利用可能です:if/case, while/case, guard/case, 及び for-in/case を含む。 for/in 文は、where 句も持つことができ、他の言語のリスト内容の機能の多くをサポートするため結びつけます。
- 新しい do 文はスコープを do 文で導入することができます。例えば:
func xyz() throws { let f = fopen("x.txt", "r") defer { fclose(f) } try foo(f) // f is closed if an error is propagated. let f2 = fopen("y.txt", "r") defer { fclose(f2) } try bar(f, f2) // f2 is closed, then f is closed if an error is propagated. } // f2 is closed, then f is closed on a normal path
(17302850)
例えば:
@available(iOS 8.0, OSX 10.10, *) func startUserActivity() -> NSUserActivity { ... }
このコード断片は、startUserActivity() メソッドが、iOS 8.0+、OS X v10.10+、及び他のプラットフォームのすべてのバージョンで利用可能であることを示します。(20938565)
public extension Array { … }
(16974298)
enum Either<T, U> { case Left(T), Right(U) }
(15666173)
これらの拡張機能を持つ、メソッドとプロパティは、あなたのコードの多くを再利用することを許し、特定のプロトコルに準拠する任意の型に追加できます。これは、"流暢なインターフェイス"の原則に従う、より自然な、発信者側の "dot" メソッドの構文につながり、それは ("山形カッコ失明"を減少させる) より単純な汎用コードの定義につながります。(11735843)
潜在的に利用できない API が実行時に利用可能かどうかを確認するには、if や guard 文で新しい #available() 条件を使って下さい。 例えば:
if #available(iOS 8.0, OSX 10.10, *) { // Use Handoff APIs when available. let activity = NSUserActivity(activityType:"com.example.ShoppingList.view") activity.becomeCurrent() } else { // Fall back when Handoff APIs not available. }
(14586648)
たとえば、次のような標準 C の qsort 関数を呼び出せます。
var array = [3, 14, 15, 9, 2, 6, 5] qsort(&array, array.count, sizeofValue(array[0])) { a, b in return Int32(UnsafePointer<Int>(a).memory - UnsafePointer<Int>(b).memory) } print(array)
(16339559)
この機能を使用すると、"ファイルが見つかりません" またはネットワークのタイムアウトなどのような回復可能なエラーを表面化させ、対処することができます。Swift のエラー処理は NSError と相互運用します。(17158652)
すべての public および internal ルーチンを使用可能にするために、あなたのテストソースコードに @testable import {ModuleName} を使用してください。アプリやフレームワークのターゲットは、[Enable Testability(テスト容易性を可能に)] ビルド設定を Yes に設定してコンパイルする必要があります。[Enable Testability] ビルド設定はアプリやフレームワークから internal のシンボルに依存するがエクスポートしない最適化を禁止しているので、[Debug] 構成でのみ使用する必要があります。(17732115)
ラベルされていない break は if 文を終了しません。これは、取り囲むループまたは switch 文を終了し、または none がある場合には違法です。(19150249)
(15975935)、(20130240)
指定イニシャライザはまだ nil を返す前に保管されているすべてのプロパティを初期化しなければなりません。これは既知の制限です。(20193929)
この機能は、Swift で使用できるように多くのグラフィックスや他の低レベルの数値の API (例えば、simd.h) を可能にします。
例えば:
guard let z = bar() else { return } use(z)
この else のブロックは、スコープを終了するか (例えば、return、throw、break、continue など)、@noreturn 関数への呼び出しで終了する必要があります。(20109722)
do { //new scope do { //another scope } }
Swift の強化および変更
- OS X v10.11、iOS 9、および watchOS 2 の SDK は、null 可能性、型コレクション、などの現代的な Objective-C の機能を採用し、改善した Swift 体験を提供するために他のものを提供します。
- 新しいキーワード try? が Swift に追加されました。
- 型名と enum の case は、今や print して、デフォルトで資格なしで String に変換します。debugPrint または String(reflecting:) はまだ完全修飾名を取得するために使用することができます。例えば:
- C 言語のブロック型の typedef は、Swift クロージャの typealiases としてインポートされました。
- MacTypes.h の Boolean 型は Swift と Objective-C の型の間をブリッジする事を許可する文脈で Bool としてインポートされます。
- __unsafe_unretained としてマークされている C 言語の構造体のフィールドは、Unmanaged を使って Swift に提示されています。
- NS_REFINED_FOR_SWIFT マクロは、まだ元の実装が利用可能でありながら、Swift で同じ API の改良版を提供するために Objective-C の宣言を考慮しないで使用できます。(例えば、Class を取る Objective-C の API は Swift でより正確なパラメータの型を提供できます。)
- 初期化メソッドは、初め外部パラメータ名の前に付けた"__"を持つ結果の Swift イニシャライザーでインポートされます。
- 他のメソッドは、そのベース名の前に"__"を付加してインポートされます。
- サブスクリプトメソッドは、他のメソッドと同様に扱われ、サブスクリプトとしてインポートされません。
- その他の宣言は、"_"が、その名の前に付けられています。
- Xcode は、短いドット構文を使用する時に列挙型の要素とオプションセットで、文脈に反応するコード補完を提供します。(16659653)
- NSManaged 属性はコアデータの自動生成されたキー値コーディング準拠の多アクセサにアクセスするために、メソッドやプロパティと一緒に使用できます。
- '.'で始まる行が、このような形式のコードを許可して、前の行に続くメソッドやプロパティのルックアップとして常に解析されるように文法が調整されています:
- 大きな構造体と列挙型のコード生成は、コードサイズを削減するように改善されました。(20598289)
- 構造体、列挙型、プロトコールの非変異型メソッドは今や、部分的に彼らの self パラメータに適用されます。
- Swift のドキュメントコメントが新しいトップレベルのリスト項目を認識します:
- 名前のないパラメータは、彼らに名前がないことを示すために今や明示的な _: を必要とします。たとえば、次の例では、以下のようなものは今やエラーになります。
- これは、今や配列にタプルを追加することが可能になりました。(17875634)
- (スカラー値そのものを生成する) スカラー値の 0 の要素を参照する機能は削除されました。(17963034)
- 可変個のパラメータは今や関数またはイニシャライザーのパラメータリスト内のどこにでも現れることができます。 例えば:
- Objective-C クラスの汎用サブクラスがサポートされるようになりました。(18505295)
- 文字列の生タイプの列挙型の要素が明示的な生の値を持っていない場合は、列挙型の名前のテキストがデフォルトになります。 例えば:
- API の performSelector ファミリは、今や Swift コードで利用できるようになりました。(17227475)
- failable イニシャライザーにデリゲート、または連鎖する時は、(例えば、self.init(…) または super.init(…) で)今や、"!" で、結果を強制開封できます。例えば:
- イニシャライザーは、今や、静的な型参照や型オブジェクト上に .init を参照することにより、静的メソッドのように参照することができます。 例えば:
- 列挙型と case は、今や indirect とマークすることができ、それは再帰的なデータ構造を定義することを可能にする、列挙型を間接的に保管させるために関連した値の原因となります。例えば:
- po または expr -O を使用した時の Swift 式の結果の書式が大幅に変更されました。導入されたカスタマイズは、以下のように洗練されています:
- debugDescription や description のいずれかのメソッドにより提供されるフォーマットされた概要は、それぞれ CustomDebugStringConvertible または CustomStringConvertible に適合する型に常に使用されます。どちらの適合型も存在しない場合、型の名前が表示され、参照型はまた、Objective-C のクラスのより密接に模倣的な既存の動作への参照アドレスを表示します。
- 列挙型、タプル、および構造体などの値型は、参照型はそうではありませんが、すべてのメンバーは、デフォルトで要約の下にインデント表示されます。この動作は、CustomReflectable を実装することにより、すべての型にカスタマイズできます。
- Unmanaged を使用したプロパティとメソッドは今や、Objective-C にエクスポーズできます。(16832080)
- クラスに @objc 属性を適用すると、ターゲットの生成した Objective-C ヘッダにそのクラスのコンパイル時の名前を変更するだけでなく、実行時の名前を変更します。これは、プロトコルにも同様に適用されます。例えば:
- Objective-C に互換性のない型を含むコレクションはもう Objective-C の互換性のある型そのものとみなされません。
- Objective-C クラスの汎用サブクラス、ならびにそのようなクラスから継承する非汎用クラスは、実行時のメタデータのインスタンス化を必要とし、直接 Objective-C のコードから名前を付けることはできません。
- -Onone (デバッグ) ビルドの性能は、標準ライブラリでの汎用の前特殊化されたインスタンスを使用することによって改善されます。これは、コンパイル時間に影響を与えることなく、多くの場合、デバッグビルドでの大幅に高速化した実行ファイルを生成します。(20486658)
- クラスのオブジェクトを参照する AnyObject と NSObject 変数は、クラスオブジェクトの型にキャストバックすることができます。例えば、このコードは成功します:
- Mirror を介する print() および reflection (反射) は、複数のペイロード型を持つすべての列挙型の現在の case とペイロードの両方を報告することができます。reflection をサポートしていない、残りの列挙型は、を @objc 列挙型と C からインポートされた列挙型です。(21739870)
- ペイロードを持つ列挙例 case は、関数として使用できます。例えば:
- ExtensibleCollectionType は RangeReplaceableCollectionType に折り畳まれています。また、デフォルトの実装がメソッドに追加されており、これらのプロトコルに関連する無料の Swift のモジュール関数の代わりに、これを使用する必要があります。(18220295)
- 標準ライブラリは、プロトコル拡張で記述されたメソッドに (map、filter、 および sort など)、多くの汎用グローバル関数を移動しました。これは、これらのメソッドが、すべてのシーケンス、コレクション型で広範囲に利用できるようにし、グローバル関数の除去を可能にしました。
- Objective-C の列挙型が Swift にインポートされたときに廃止された列挙型の要素は、もはや無効でない要素の名前には影響しません。これにより、いくつか列挙型要素の Swift の名前が変更されることがあります。(17686122)
- C からインポートされたすべての列挙型は NS_ENUM または NS_OPTIONS で宣言されていないものも含め、RawRepresentable です。この変更の一環として、そのような列挙型の値プロパティは rawValue に名前が変更されました。(18702016)
- Swift のドキュメントのコメントは、マークダウン形式に基づいた構文を使用し、プレイグラウンド内でリッチコメントでそれらを合わせます。
- 最も外側のリスト項目は、特別なフィールドとして解釈され、Xcode のクイックヘルプで強調表示されます。
- 文書を記載するパラメータには2つのメソッドがあります:パラメータのアウトラインと、独立したパラメータフィールドです。あなたは混在させ、doc コメント全体を通じて、どのような順序や連続性にでも合うようにできます。これらは、リスト項目として解析されるので、あなたはそれらの下に任意のコンテンツをネストできます。
- パラメータアウトライン構文:
- 個別のパラメータフィールド:
- 戻り値を文書化:
- CFunctionPointer<T -> U> 型が削除されました。C 関数の型は、新しい @convention(c) 属性を使用して指定します。他の関数型と同様、@convention(c)<T ->U はオプションとならない限り、nullable ではありません。ブロック型を指定する @objc_block 属性も削除され、@convention(block) に置き換えられました。
- メソッドと関数は、パラメータ名について、同じ規則です。あなたは“_.” で外部パラメータ名を提供するのを省略できます。デフォルト引数の特別なルールを持っているように、さらにモデルを簡単にするために、削除されたパラメータ名を指定するための略記 "#" があります。
- NS_OPTIONS 型はオプションの set のようなインターフェイスを表し、OptionSetType プロトコルに準拠したとしてインポートします。以下のようなビット単位の演算を使用する代わりに:
- 型注釈は、もはやパターンで許可されず、範囲外の宣言の一部とみなされます。これは、以前以下のように書かれたコードは:
- do/while ループは、その主要なキーワードから文がループであるかどうか、明らかにするため repeat/while に名前が変更されています。
- forEach が SequenceType に追加されました。これは、それぞれに本体のクロージャを呼び出し、ひと続きの要素を反復処理できます。例えば:
- for-in ループとは異なり、本体のクロージャの現在の呼び出しを終了するか、または後続の呼び出しをスキップするのに break や continue を使用することはできません。
- また for-in ループとは異なり、本体のクロージャで return を使用して脱出できるのは現在の呼び出しからクロージャのみで、外側のスコープではなく、後続の呼び出しをスキップできません。
- Word や UWord 型は標準ライブラリから削除されました。代わりに Int と UInt を使用してください。(18693488)
- クロージャまたは @autoclosure パラメータを取るほとんどの標準ライブラリの API は今や "rethrow" を使用します。これは、エラーを throw するように map や filter のようなメソッドにクロージャパラメータを可能にさせ、&&、||、?? のような短絡演算子を可能にし、エラーが発生する可能性がある、式で動作します。(21345565)
- SIMD の改善:今や &+、&-、&* 演算子を使用した広角語彙でチェックされない数式をサポートするだけの、simd モジュール内の整数ベクトル型、ベクトルのマシンモデルをより良くサポートするために。+、-、および * 演算子は整数ベクトルでは使用できず、Xcode は自動的に包装演算子に置き換えるように示唆します。
- すべての CollectionType オブジェクトは今やスライス可能です。SequenceType は同じ順序でいくつかの値だけを表す型である、SubSequence の概念が今やあります。例えば、ArraySubSequence 型は、ArraySlice で、それから来た Array を一意に参照するのに限って、コピーを回避する Array 型のバッファ上の効率的なビューです。
- print と debugPrint 関数が改善されました。
- 両方の関数とも可変個引数となっており、1回の呼び出しで任意の数の項目を印刷することができます。
- separator: String = " " が追加され、どのように項目が分離されているかを制御できるようになりました。
- appendNewline: bool = true は、terminator: String = "\n" に変わりました。この変更に伴い、
- 出力ストリームを取るバリアントの場合、引数ラベル toStream が、ストリーム引数に追加されました。
- 一貫性と汎用コードの優れた組成物について、ArraySlice 指数はもはや、常にゼロベースではないが、変異した後、そのマッピングを、それらがスライスし維持するコレクションのインデックスに直接マッピングします。
- RangeReplaceableCollectionType.extend() メソッドは、appendContentsOf() に名前が変更され、また splice() メソッドは insertContentsOf() に名前が変更されました。(21972324)
- find は indexOf() に名前が変更され、sort は sortInPlace() に、sorted() は sort になりました。
- 初期化の構文は、肩変換で好まれているスタイルなので String.toInt() は、failable の Int(String) イニシャライザーに名前が変更されました。
- String は、もはや String に顕著に有効である事から Unicode でない正しい順序アルゴリズムを防止するために、SequenceType に準拠していません。書記素クラスタをベースにした、UTF8 をベースにした、または UTF8 をベースにしたものを実行するには、それぞれ .characters、.UTF8、および .utf16 プロジェクションを使用します。
- 汎用関数の型内で使用されていない型パラメータを宣言する汎用関数は、コンパイラエラーを生じます。 例えば:
- Dictionary.removeAtIndex(_:) メソッドは今や、キーと値のペアが2要素のタプル(Void を返すのではなく) としては削除されています。同様に、Set.removeAtIndex(_:) メソッドは、要素を返すものとしては削除されています。(20299881)
- Swift 標準ライブラリ内の型の汎用パラメータは、API の型の役割を反映して名前が変更されました。例えば、Array<T> は Array<Element> になり、UnsafePointer<T> は UnsafePointer<Memory> になり、などです。(21429126)
- SinkType プロトコルと SinkOf 構造体は、(T) -> () クロージャのために標準ライブラリから削除されました。(21663799)
try? は、throw することもある操作を実行しようとします。操作が成功した場合、結果はオプションでラップされます。それは失敗した場合 (つまり、エラーが throw された場合) 、結果は nil であり、エラーは破棄されます。例えば:
func produceGizmoUsingTechnology() throws -> Gizmo { … } func produceGizmoUsingMagic() throws -> Gizmo { … } if let result = try? produceGizmoUsingTechnology() { return result } if let result = try? produceGizmoUsingMagic() { return result } print("warning: failed to produce a Gizmo in any way") return nil
try? は、常に式の結果型に Optional の余分なレベルを追加して評価されます。throw する関数の通常の戻り値の型は int? であり、try? でそれを呼び出した結果は、Int??、または Optional<Optional<Int>> になります。(21692467)
enum Fruit { case Apple, Banana, Strawberry } print(Fruit.Apple) // “Apple” debugPrint(Fruit.Apple) // “MyApp.Fruit.Apple”)
(21788604)
これの主な結果は、BOOL 型のパラメータを持つブロックの typedef は、(以前のリリースのように ObjCBool ではなく) Bool 型のパラメータを持つクロージャとしてインポートされていることです。これは、インポートされた Objective-C のメソッドへのブロックパラメータの動作と一致します。(22013912)
表現が重要である場合には、Boolean は明確な DarwinBoolean 型としてインポートされ、それは BooleanLiteralConvertible で、(ObjCBool 型に非常によく似た) 「条件」で使用できます。(19013551)
これは、Swift コンパイラにとってこれらの参照は、本当に strong(+1) または unretained(+0) であることを意図しているかどうかを知る事は不可能です。(19790608)
NS_REFINED_FOR_SWIFT マクロは別の宣言では異なる動作をします。
- (instancetype)initWithClassName:(NSString *)name NS_REFINED_FOR_SWIFT;
init(__className: String)
- (NSString *)displayNameForMode:(DisplayMode)mode NS_REFINED_FOR_SWIFT;
func __displayNameForMode(mode: DisplayMode) -> String
@property DisplayMode mode NS_REFINED_FOR_SWIFT;
var __mode: DisplayMode { get set }
(20070465)
@NSManaged var employees: NSSet @NSManaged func addEmployeesObject(employee: Employee) @NSManaged func removeEmployeesObject(employee: Employee) @NSManaged func addEmployees(employees: NSSet) @NSManaged func removeEmployees(employees: NSSet)
これらはあなたの NSManagedObject サブクラスで宣言できます。(17583057)
foo .bar .bas = 68000
文脈的に静的なメンバの検索で行を開始することはできなくなりました (例えば、すなわち .staticVar = MyType())。(20238557)
let a: Set<Int> = [1, 2, 3] let b: [Set<Int>] = [[1], [4]] b.map(a.union) // => [[1, 2, 3], [1, 2, 3, 4]]
(21091944)
- Throws: ...
この項目はエラーが throw され、なぜ起こるか文書化するために使用されます。ドキュメントは、Xcode のクイックヘルプのパラメータと return の説明と一緒に表示されます。(21621679)
func f(Int) { }
これは以下のように書かなければなりません:
func f(_: Int) { }
これは、引数のラベルモデルを簡素化し、func f((a: Int, b: Int)) のような場合が "a" や "b" の名前の付いたパラメータを持っていない理由を明確にします。(16737312)
func doSomethingToValues(values: Int... , options: MyOptions = [], fn: (Int) -&gt; Void) { … }
(20127197)
enum WorldLayer : String { case Ground, BelowCharacter, Character }
これは以下と等しい:
enum WorldLayer : String { case Ground = "Ground" case BelowCharacter = "BelowCharacter" case Character = "Character" }
(15819953)
extension UIImage { enum AssetIdentifier: String { case Isabella case William case Olivia } convenience init(assetIdentifier: AssetIdentifier) { self.init(named: assetIdentifier.rawValue)! } }
(18497407)
let x = String.init(5) let stringType = String.self let y = stringType.init(5) let oneTwoThree = [1, 2, 3].map(String.init).reduce("”, combine: +)
静的な型を使用して構築すると、.init はまだ暗黙的であり、関数値としてイニシャライザーを参照する時、動的型のオブジェクトを使う時 String(5). .init のような物が必要とされる。 (21375845)
enum List<T> { case Nil indirect case Cons(head: T, tail: List<T>) } indirect enum Tree<T> { case Leaf(T) case Branch(left: Tree<T>, right: Tree<T>) }
(21643855)
これらの出力のカスタマイズはすべてのフィールドとその値の完全なリストを提供するために -O 引数を指定して全てのフィールドとその値の完全なリストを提供せず、p または expr を使用してバイパスできます。(21463866)
// Swift @objc(MyAppDelegate) class AppDelegate : NSObject, UIApplicationDelegate { // ... } // Objective-C @interface MyAppDelegate : NSObject <UIApplicationDelegate> // ... @end
(17469485)
たとえば、以前 Array<SwiftClassType> は @objc としてマークされたプロパティの型として許可されました。このようなことはもうありません。(19787270)
Objective-C クラスの汎用サブクラスをサポートするのは最初に添加した場合、生成された Objective-C のブリッジヘッダが誤ってそのようなクラスをリストし、それが使用された場合、不正な実行時の動作につながるか、コンパイル時のエラーになります。この問題は修正されました。
クラスの @objc 属性の動作は、明確化され、ブリッジヘッダに表示することができないクラスに @objc を適用するのはエラーになります。
クラスのメンバは、クラスの任意のスーパークラスが @objc クラスで、かつすべての @objc クラスは NSObject から継承しなければならない場合、暗黙的に @objc であるため、この変更は有効なコードと動作の変化をもたらさないことに注意してください。(21342574)
let x: AnyObject = NSObject.self let y = x as! NSObject.Type
クラスのオブジェクトを含む配列、辞書、およびセットは正常に NSArray、NSDictionary、 と NSSet と同様にブリッジします。-[NSURLSessionConfiguration protocolClasses] のような NSArray<Class> * オブジェクトを提供する Objective-C の API は、Swift で使用する場合、正しく機能するようになりました。(16238475)
enum Either<T, U> { case Left(T), Right(U) } let lefts: [Either<Int, String>] = [1, 2, 3].map(Either.Left) let rights: [Either<Int, String>] = [“one”, “two”, “three”].map(Either.Right)
(19091028)
Swift 標準ライブラリ
- Parameters: - x: ... - y: ...
- parameter x: ... - parameter y: ...
- returns: ...
その他の特殊フィールドは、全てのマークダウンのレンダリング機能をサポートするのと同様に、クイックヘルプで強調表示されます。(20180161)
Declaration func printFunction(str: String, newline: Bool) func printMethod(str: String, newline: Bool) func printFunctionOmitParameterName(str: String, _ newline: Bool) Call printFunction("hello", newline: true) printMethod("hello", newline: true) printFunctionOmitParameterName("hello", true)
(17218256)
// Swift 1.2: object.invokeMethodWithOptions(.OptionA | .OptionB) object.invokeMethodWithOptions(nil) if options @ .OptionC == .OptionC { // .OptionC is set }
オプションの set は、set のリテラル構文と、contains のような、set のようなメソッドをサポートしています。
object.invokeMethodWithOptions([.OptionA, .OptionB]) object.invokeMethodWithOptions([]) if options.contains(.OptionC) { // .OptionC is set }
新しいオプションの set type は OptionSetType プロトコルに準拠した構造体として Swift で書くことができます。型が静的 let 定数として rawValue プロパティとオプションの定数を指定した場合、標準ライブラリは、オプションセット API の残りのデフォルトの実装を提供します:
struct MyOptions: OptionSetType { let rawValue: Int static let TuringMachine = MyOptions(rawValue: 1) static let LambdaCalculus = MyOptions(rawValue: 2) static let VonNeumann = MyOptions(rawValue: 4) } let churchTuring: MyOptions = [.TuringMachine, .LambdaCalculus]
(18069205)
var (a : Int, b : Float) = foo()
このように書く必要があります:
var (a,b) : (Int, Float) = foo()
明示的な型注釈が必要な場合。前者の構文はタプル要素のラベルのようで曖昧でした。(20167393)
Swift 1.2 の場合:
do { ... } while <condition>
Swift 2.0 の場合:
repeat { ... } while <condition>
(20336424)
(0..<10).forEach { print($0) }
これは、以下のものに非常に似ています。
for x in 0..<10 { print(x) }
しかし、以下の相違点に注意してください:
(18231840)
simd モジュール内のベクトル型のコード生成は、多くの場合、劇的に改善された性能につながる、より良いベクトルのハードウェアを利用するように改善されました。(21574425)
分割/スライス配列について以下の無料の Swift の関数が削除され、プロトコル拡張でデフォルトの実装された SequenceType プロトコルのメソッド要件に置き換えられています。CollectionType は、その要素の効率的なアクセスを利用することを可能にする特別な実装を持っています。
/// Returns the first `maxLength` elements of `self`, /// or all the elements if `self` has fewer than `maxLength` elements. prefix(maxLength: Int) -> SubSequence /// Returns the last `maxLength` elements of `self`, /// or all the elements if `self` has fewer than `maxLength` elements. suffix(maxLength: Int) -> SubSequence /// Returns all but the first `n` elements of `self`. dropFirst(n: Int) -> SubSequence /// Returns all but the last `n` elements of `self`. dropLast(n: Int) -> SubSequence /// Returns the maximal `SubSequence`s of `self`, in order, that /// don't contain elements satisfying the predicate `isSeparator`. split(maxSplits maxSplits: Int, allowEmptySlices: Bool, @noescape isSeparator: (Generator.Element) -> Bool) -> [SubSequence]
以下のコンビニエンス拡張子は、split のために提供されています:
split(separator: Generator.Element, maxSplit: Int, allowEmptySlices: Bool) -> [SubSequence]
また、新しいプロトコル要件と CollectionType のデフォルトの実装が利用可能になりました:
/// Returns `self[startIndex..<end]` prefixUpTo(end: Index) -> SubSequence /// Returns `self[start..<endIndex]` suffixFrom(start: Index) -> SubSequence /// Returns `prefixUpTo(position.successor())` prefixThrough(position: Index) -> SubSequence
(21663830)
print(x, appendNewline: false) は print(x, terminator: "") と表されます。
Swift 1.2 からの println 関数は削除されました。(21788540)
以前は:
var a = Array(0..<10) var s = a[5..<10] s.indices // 0..<5 s[0] = 111 s // [111, 6, 7, 8, 9] s.removeFirst() s.indices // 1..<5
以後は
var a = Array(0..<10) var s = a[5..<10] s.indices // 5..<10 s[5] = 99 s // [99, 6, 7, 8, 9] s.removeFirst() s.indices // 6..<10
a.sortSubrangeInPlace(3..<7) のような明示的な部分範囲引数を取るコレクション・アルゴリズムのバリアントを定義するのではなく、Swift の標準ライブラリは、アルゴリズムとよく構成する"スライス" を提供します。これで、例えば a[3..<7].sortInPlace() と書くことができます。ほとんどのコレクションと、これらのアルゴリズムは自然に構成できます。
例えば、この変更が導入される前は:
extension MyIntCollection { func prefixThroughFirstNegativeSubrange() -> SubSequence { // Find the first negative element let firstNegative = self.indexOf { $0 < 0 } ?? endIndex // Slice off non-negative prefix let startsWithNegative = self.suffixFrom(firstNegative) // Find the first non-negative position in the slice let end = startsWithNegative.indexOf { $0 >= 0 } ?? endIndex return self[startIndex..<end] } }
コレクションは Array<Int> でない限り、上記のコードは Int 型の任意のコレクションで動くだろう。不幸にも、配列スライスのインデックスがゼロベースなら、メソッドの最後の2行は、以下のように変更する必要があります:
let end = startsWithNegative.indexOf { $0 >= 0 } ?? startsWithNegative.endIndex return self[startIndex..<end + firstNegative]
これらの違いは、スライスで作業すると、厄介な、エラーが発生しやすい、非汎用になります。
この変更の後、Swift のコレクションは、少なくとも変異があるまで、スライスインデックスは、彼らがスライスされてから、同じ要素を参照するように、コレクションで有効な保証を提供します。(21866825)
func foo<T>() { } // error: generic parameter ’T’ is not used in function signature
Objective-C
Objective-C 言語の変更
- アウトパラメータを経由して Core Foundation のオブジェクトを返す C 関数は、今やオブジェクトが +0 または +1 で返されたかどうかを記述できます。
- __kindof 型が導入されています。__kindof 型として宣言されたオブジェクトは、id と、特定のオブジェクト型の混合のように動作します:それらは上限を指定し (例えば、UIView でなければならないか、またはそのサブクラス) ますが、その上限の任意のサブタイプに暗黙的なダウンキャストを可能にします。たとえば、以下のように仮定した場合
- 二重のアンダースコアの null 値を許可する修飾子 (__nullable、__nonnull、および __null_unspecified) は、大文字で始まる、単一のアンダースコアを使用するように改名されました:それぞれ _Nullable、_Nonnull、および _Null_unspecified。コンパイラであらかじめ定義されたマクロは、ソース互換性のため新しい名前に古い二重の非特定の名からマッピングします。(21530726)
- 軽量の汎用関数は、今や NSArray、NSSet、及び NSDictionary のようなコレクションクラスの型情報を指定することができます。型情報を使用すると、Objective-C からブリッジした時、Swift のアクセスを改善し、あなたが書かなければならないコードを簡素化します。 例えば:
- NS_SWIFT_NAME マクロは、その定数が Swift にきれいにマップされない列挙型のインポートを制御するために使用できます。例えば:
OSStatus MyCFGetImportantValue(CFDictionaryRef data, CFStringRef __nullable * __nonnull CF_RETURNS_NOT_RETAINED outImportantValue); OSStatus MyCFCopyImportantValue(CFDictionaryRef data, CFStringRef __nullable * __nonnull CF_RETURNS_RETAINED outImportantValue);
(18742441)
-[UIView subviewWithTag:]
__kindof 型の UIView * が、生成され、その後:
UIButton *button = [view subviewWithTag:0]; // okay: UIButton is a UIView [[view subviewWithTag:0] setTitle:@"Bounded" forState: UIControlStateNormal]; // okay: method found in UIButton UIResponder *responder = [view subviewWithTag:0]; // okay: UIView is a UIResponder NSString *string = [view subviewWithTag:0]; // error: UIView is unrelated to NSString
(19589424)
NSArray<UIImage *> *images; NSDictionary<NSString *, NSURL *> *resourcesByName;
(6294649)
typedef NS_ENUM(NSInteger, DisplayMode) { DisplayMode256Colors NS_SWIFT_NAME(With256Colors), DisplayModeThousandsOfColors, DisplayModeMillionsOfColors };
これは、Swift に以下のようにインポートされます:
@objc enum DisplayMode : Int { case With256Colors case ThousandsOfColors case MillionsOfColors }
マクロはまた、ファクトリ・メソッドが、イニシャライザとしてインポートされているかどうかを制御するために使用できます。 例えば:
@interface MyController : UIViewController + (instancetype)standardControllerForURLKind:(URLKind)kind NS_SWIFT_NAME(init(URLKind:)); @end
これは、Swift に以下のようにインポートされます:
class MyController : UIViewController { init(URLKind kind: URLKind) }
その名前は、自動ファクトリメソッドのインポートのための規則に従っていませんけれども。(19240897)
解決済みの問題
Xcode 6.4 以降 Xcode 7.0 で解決された問題
Interface Builder
- WatchKit インタフェースで複数のストーリーボードを作成できます。(19781408)
- Interface Builder は、すべてのセグエ型をサブクラス化することを許可します。(19911504)
- Interface Builder は、アイデンティティ・インスペクタを介しての AppKit と UIKit のビューの accessiblityIdentifier プロパティの設定を可能にします。(8913778)
- NSBox はインタフェースビルダー文書内にそのコンテンツビューを格納し、ボックスとそのサブビューの間に配置ガイドを置く事も可能にします。(10726996)
- Xcode 4.6 以前の開発ターゲットを持つインタフェースビルダー文書は、開くときアップグレードされます。(12984639)
- Interface Builder は充足不能な制約のデバッグを支援するため、自動レイアウト制約するための識別子を設定できます。(13645911)
- Interface Builderで整列および配布のコマンドは、制約を生成することなく使用できます。(19223827)
- キャンバス上のビューのノブのサイズを変更すると、キャンバスフレーム外と相互作用できます。(15864964)
- Interface Builder は、OS X の文書内の (doubbleAction など) action 以外の送信者にトリガーポイントからの接続アクションをサポートしています。Xcode 7 にも、接続されたアクションが iOS に合わせて、OS X の文書の[接続(Connection)] インスペクタに表示され、複数の接続されたアクションを示すことを許可します。(2161960)
- Interface Builder のオブジェクトライブラリ内のラジオボタンのテンプレートは、今や、OS X v10.8 以降で非推奨とされた古い NSMatrix より、個々の NSButton オブジェクトとして実装されています。ラジオボタンは、自動的にそれらが同じスーパービューや -action メソッドを持っている場合グループとして機能します (一つのボタンを選択すると、他の関連するボタンをすべて選択解除します)。(16965941)
- initWithNibName:bundle: は、iOS 9 SDK で UITableViewController の指定イニシャライザとして設定されています。(19775924)
- 実行先に依存するような SDKROOT などの環境変数をパスする際にスクリプト実行のスキームアクションは、アカウントに、実行先を取ります。(19652312)
- これは、チェックボックスを切り替えるときにオプションキーを押したままにして、管理スキームシートの列のすべてのチェックボックスを切り替えることが可能です。(8096575)
- Plugin 先とフレームワークのターゲット上の Copy Files ビルドフェーズは、リソースディレクトリよりも、フレームワーク内の Plugins ディレクトリに、その内容をのコピーします。(11488493)
- -scheme で使用する場合、xcodebuild install コマンドは、実行アクションではなくむしろそのスキームのアーカイブアクションで、指定されたターゲットをビルドします。(19391445)
- Xcode のビルドシステムは、以前のビルドで生成されたビルド・アーティファクトの幾つかの型の古くなったファイルの削除をサポートしていますが、以下のものはプロジェクトから削除されました。
- 次のビルドが、それらはもはや必要とされないことを検出したときに古いファイルは削除されます。
- 古いファイルは、「古いビルド製品の削除」セクションの下でビルドログナビゲータに表示されます。
- 古くなったファイルの削除は、それを含むディレクトリが空になることを引き起こす場合、ディレクトリも同様に削除されます。
- 現在古くなったファイルの削除によって処理される、ビルド・アーティファクトの種類は以下のとおりです。
- - コピーされたリソースとヘッダーファイル
- - アセットパックのオンデマンド・リソース
- - モジュールマップの仕様
- - Swift が生成した API ヘッダー
- OBJROOT、SYMROOT、 または DSTROOT で生産されたビルド・アーティファクトだけが、古くなったファイルの削除に利用できます。
- アーカイブビルド操作は、ACTION ビルド設定の install 値を使用します。副次的影響:
ビルド
(19479602)
- シェルスクリプトは Xcode のビルドに対してアーカイブされたときに検出するために、この動作を使用できます。
- ACTION 環境変数がそれに応じて更新されるべく検査する既存のシェルスクリプト。
- 外部ビルドシステムのターゲットは、アーカイブする時、それに応じて更新する build の代わりに、install アクションが渡されます。
- シェルスクリプト・ビルド・フェーズを使用した外部ビルドシステムのターゲットおよび集計ターゲットは、適切なインストール場所を指定する TARGET_BUILD_DIR と BUILT_PRODUCTS_DIR の適切な値を持っています (SKIP_INSTALL のビルド設定を尊重して)。
(20192652)
シミュレータ
- Xcode の[シミュレータの背景の、Fetch メニュー項目(The Simulator Background Fetch menu item)] は予想通りに動作します。(20145602)
デバッグ
- ビューのデバッグツールは、NSView と UIView のオブジェクト・インスペクターを持っています。(18120189)
一般
- Xcode は IDEBuildOperationMaxNumberOfConcurrentCompileTasks ユーザーのデフォルトがマシンで利用可能な CPU の数を超えることができます。(20998547)
- ターゲットのスキームで行ったローカライズ設定 (コマンドラインで行われた他の設定と同様に) は、シミュレータで起動時にその名誉を受けます。(19490124)
- Xcode 7 は、同じ文書の実行中にロック解除のスクリプトが実行された時、文書が編集されると発生するクラッシュが修正されています。(21528657)
既知の問題点
Xcode 7.0 の既知の問題点
Swift
- as パターンで複数の型に対して switch を使用すると、メモリリークを引き起こす可能性があります。例えば、switch 文のこの種類を避けて下さい:
switch x { case let a as A: ... case let b as B: ... case let c as C: ... default: ... }
switch の代わりに if let a = x as? A 文を使って、このコードを書き換えてください。このパターンは、メモリリークを防ぐための型チェックを実行します。(22587077)
プレイグラウンド
- Xcode の以前のバージョンで作成されたプレイグラウンドは、Swift 2 にアップグレードできない場合があります。
- 以前、バージョンエディタが、"あなたはそれを表示する権限を持っていないため、ファイル<ファイル名>を開くことができませんでした。"と言う警告を提示したプレイグラウンドを開きます。
Swift 2に変換しようとする前にプレイグラウンドをアップグレードするために [エディタ(Editor)] > [プレイグラウンドをアップグレード(Upgrade Playground)] を選択してください。(20902099)
警告ダイアログを閉じ、標準エディタを表示して下さい。(20623808)
Interface Builder
- Interface Builder でビューの意味属性(Semantic attribute)を設定しても、実行時には効果がありません。
意味属性を変更しようと思うビューへのアウトレットを作成し、次に awakeFromNib で属性をプログラム的に設定して下さい。(22529786)
ローカライズ
- XLIFF のエクスポートまたはインポートの間に、NSLocalizedString マクロの問題や空の文字列ファイルがエラーになることがあり、"それは正しい形式ではないので、データを読み取ることができません"となります。
- Watch 機能拡張上の UI 要素は、アプリが別の言語にローカライズされているにもかかわらず、英語で表示されることがあります。
- フレームワークやライブラリ内の誤ってビルドされたビットコードを含むアプリは App Store では拒否されます。
- [ビットコード有効化] のビルド設定 (ENABLE_BITCODE=YES) が正しいことを確認してください。
- アーカイブのビルドやインストールビルドのいずれかを実行し、配布のためのフレームワークとライブラリ製品を製造して下さい。
- フレームワークとライブラリのプロバイダーは、Xcode 7 開発のためビットコードを含める必要があり、Xcode 7 は、デフォルトでビットコードを生成します。しかし、ビットコード有効化したフレームワークとライブラリ製品はまだ Xcode 6 ではうまく動作しません。Xcode 6 での開発をまだサポートする必要がある場合、あなたはビットコードなしのあなたの製品の追加のバージョンを生成しなければなりません。
- 供給されたフレームワークやライブラリ製品を使用し、Xcode 6 の開発をサポートする必要がある場合は、供給元からの正しい製品を使用していることを確認してください。Xcode 7 開発のためにビルドされた、ビットコードをフレームワークやライブラリは含みますが、ビットコードを有効化したライブラリは Xcode 6 ではうまく動きません。この問題と修正は、あなたが、静的ライブラリを使っているか動的ライブラリを使っているかどうかに基づきます。
- フレームワークディレクトリに cd します。
- Xcode の複数のバージョンをインストールして持っている場合は、Xcode 7 を選択して xcode-select を使用してください。
- {Framework} をフレームワークの名前に置き換えて、以下のコマンドを入力して下さい。
プロジェクトから空の文字列のファイルを削除するか、プロジェクト内の NSLocalizedString マクロの問題を検索するのに、以下のターミナルコマンドを使用して下さい。
$find <project directory> -name "*.m" -exec xcrun extractLocStrings { } \;
(21101899)
その拡張子を含む、Watch アプリのすべての要素を、目的の言語にローカライズして下さい。(22065581)
ビットコード
あなたが iOS、watchOS、および tvOS プラットフォームのためのフレームワークとライブラリ製品のプロバイダである場合、貴社の製品は、完全なビットコードの内容を含めなければなりません。Xcode 7 ビルドシステムのデフォルトは、[ビットコード有効化(Enable Bitcode)] 設定を有効にするのを含みますが、標準的な[デバッグ] または[リリース・ビルド] は、ビルドされたフレームワークとライブラリ製品の完全なビットコードの内容は含みません。
配布のためのフレームワークとライブラリ製品をビルドし、完全なビットコードの内容が含まれていることを確認するには、フレームワークとライブラリのプロバイダは以下の事を行わなければなりません。
(22483622)
ビットコードなしにライブラリをビルドするには、[ビットコード有効化] 設定を無効 (ENABLE_BITCODE= NO) にして Xcode 7 を使用するか、Xcode 6 使用して下さい。
(22462511)
Static libraries(静的ライブラリ) Xcode 6 でのビットコードを有効化した静的ライブラリを使用しようとする試みは、_llvm.embedded.module と _llvm.cmdline などとして重複したシンボルについてのリンカエラーを生成します。
あなたは Xcode 6 でそれを使用するビットコードなしでビルドされた静的ライブラリのバージョンが必要です。
Dynamic libraries(動的ライブラリ) ビットコードを含む、動的ライブラリを埋め込んだフレームワークは、Xcode 6 をではすべてエラーにはなりませんが、それは不必要にアプリのサイズを大きくします。
既存のフレームワークでこの問題を回避するには、Xcode 7 から bitcode_strip コマンドを使用し、フレームワークのコピーからビットコードを削除します。ターミナルウィンドウを使用して:
$ xcrun bitcode_strip -r {Framework}.dylib -o tmp.dylib $ mv tmp.dylib {Framework}.dylib
(22462511)
ビルド
- あなたの iOS アプリが watchOS アプリを埋め込み、それぞれのアプリに埋め込まれた iOS と watchOS 両方のフレームワークを持っている場合は、あなたのプロジェクトには、アーカイブのアクションを実行すると、ビルドに失敗します。
- Xcode 7.0 で watchOS フレームワークを作成すると、Watch アプリは埋め込み先として設定されます。これは watchOS フレームワークが、Watch 拡張機能ターゲットに埋め込まなければならないため、デバイスにインストールするのは失敗します。
- プロジェクトナビゲータでプロジェクトを選択し、プロジェクトエディタを開きます。
- Watch アプリケーション・ターゲットを選択します。
- "リンクされたフレームワークとライブラリ" リストにあるフレームワークを選択します。
- フレームワークを削除するには、[削除] (-) をクリックします。
- プロジェクトナビゲータでプロジェクトを選択し、プロジェクトエディタを開きます。
- Watch 拡張機能ターゲットを選択します。
- "リンクされたフレームワークとライブラリ" リスト内の追加 (+) をクリックします。
- 表示されたリストから、フレームワークを選択します。
- [追加] をクリックします。
- Option キーを押したままにします。
- [製品(Product)] > [ビルドフォルダを削除(Clean Build Folder)] を選択してください
- watchOS フレームワークは、アプリの拡張機能の安全のために、デフォルトでは構成されていません。
フレームワークの watchOS バージョンには (PRODUCT_NAME ビルド設定を使用して) 別の製品名を使用してください。(22183332)
Watch アプリへのフレームワークの埋め込みを削除して下さい。
フレームワークは、Watch アプリケーションから削除された後、Watch 拡張機能に埋め込まれるようにそれを構成します。
(22522811)
watchOS フレームワークが Watch 機能拡張によって使用されているので、アプリの拡張機能が安全としてマークされなければなりません。watchOS フレームワークターゲットを作成した後、フレームワークのターゲットの Require Only App-Extension-Safe API ビルド設定を Yes に設定して下さい。(22540012)
シミュレータ
- シミュレータでは、NSURLSession を使用してバックグラウンドのアップロード/ダウンロードが完了しますが、通知はアプリがバックグラウンドで動作しているときに完了したことを示すために、アプリに示しません。
- Watch シミュレータは、リセットまたは再起動後に入力の取得を停止することがあります。
- シミュレートされた外部ディスプレイで映像を再生するのは、iPad としてシミュレータを実行すると正しく機能しません。
- シミュレータで 1080p の外部ディスプレイにビデオの再生するのは、低解像度でレンダリングします。
期待通り、デバイス上でテストは動作します。(16532261)
Watch シミュレータがホームボタンイベントに応答しない場合、Watch シミュレータを終了して再起動して下さい。(21135676)
シミュレータを使用するには、iPhone として実行して下さい。(17979778)
デバイスで低解像度または 1080p の再生テストでビデオを再生して下さい。(18296724)
テスト
- UI テストは、それらのアクセシビリティのタイトル要素からの情報を使用して要素を識別することはできません。
- UI テストは、OS X 上 のポップオーバー(popovers) と対話することはできません。(21162677)
代わりに、アクセシビリティ識別子を設定します。(20409319)
デバッグ
- 実行時コード健全化は、Xcode のサーバーのボットのために有効になっていると、コード健全化のチェックによってトリガされる全てのクラッシュについて詳細な情報は、統合のため生のビルドログで利用可能になります。(21047341)
- 同じ iOS アプリにビルドされた watchOS2 のアプリも持っているプロジェクトに watchOS1 アプリの拡張機能はデバッグできません。
- Xcode からのオンデマンドリソースを使用するアプリのデバッグ中に、前景からまたは前景にアプリを移動する場合、または NSBundleResourceRequest の loadingPriority を変更する際に、タグリクエストの進行がゼロにリセットされることがあります。(21882271)
Xcode は、両方が存在する場合 watchOS2 アプリを選び、watchOS1 アプリの拡張機能をデバッグ可能にするには iOS アプリバンドルから watchOS2 アプリを削除する必要があります。iOS アプリのビルド依存として watchOS2 アプリを削除する iOS アプリのビルド相を編集し、埋め込み Watch 内容ビルド相からそれを削除します。ビルド製品を綺麗にし、その後 watchOS1 アプリの拡張機能をデバッグするために実行して下さい。(21173814)
ソース制御
- バージョンエディタでの比較と非難 (Blame) ビューで、プレイグラウンドの結果が得られない場合があります。(21879794)
- ソース制御アカウントのパスワードは、Xcode 7 で空に表示されることがあります。
パスワードを再入力します。(21252258)
一般
- Xcode 7 は、二要素認証をサポートしていません。
- Xcode が開いている間にデバイスを復元すると、お使いのデバイスが使用不可のように見えるか、または復元完了後にロックされることがあります。
- アーカイブからデバイス上のアプリの実行中にデバイスウィンドウを使用するgと、クラッシュログは抽象化されていないか、または部分的にしか抽象化されていません。
開発者は、ユーザー名とパスワードで認証を継続する必要があります。(19581582)
一度抜き、復元後にお使いのデバイスに接続して下さい。(21344895)
アーカイブの dSYM フォルダ内の dSYM ファイルを複製し、デスクトップにドラッグし、次にあなたのためスポットライトがシンボルをインデックスするのを数分待って下さい。(21867829)
アプリの機能拡張のクラッシュログは、TestFlight を介して配布されたビルドでは使用できません。(22661518)
前:Xcode 公開ノート
次:Xcode 6 公開ノート