AppCode 2023.1 ヘルプ

プロジェクトで CocoaPods を使用する

このチュートリアルでは、cocoaconferences.com(英語) Web サイトで使用されているリモート YAML ファイル(英語)から最新の会議リストをロードすることにより、iOSConferences アプリケーション(AppCode で SwiftUI アプリケーションを作成するを参照)について詳しく説明します。

YAML ファイルを解析するには、CocoaPods(英語) 依存関係マネージャーを使用してプロジェクトに追加される Yams(英語) ライブラリを使用します。

ステップ 1. CocoaPods をインストールする

  1. iOSConferences(英語) プロジェクトをダウンロードし、AppCode で開きます。

  2. メインメニューからツール | CocoaPods | Ruby SDK の選択を選択します。または、設定ダイアログ Ctrl+Alt+Sツール | CocoaPods に移動します。

  3. 環境設定ダイアログで Ruby SDK を追加するをクリックし、CocoaPods で使用される Ruby SDK へのパスを指定します。デフォルトでは /usr/bin/ruby です。

    Add Ruby SDK
  4. CocoaPods をインストールするボタンをクリックしてください。

CocoaPods gem をインストールすると、pods のリストが環境設定ダイアログのツール | CocoaPods ページに表示されます。

List of pods

ステップ 2. Yams pod をプロジェクトに追加する

  1. メインメニューからツール | CocoaPods | CocoaPods ポッドファイルを作成するを選択します。Podfile は、.xcodeproj ファイルと同じディレクトリに作成され、エディターで開かれます。

  2. Podfile で、iOSConferences ターゲットに Yams pod を追加します。

    project 'iOSConferences.xcodeproj' target 'iOSConferences' do use_frameworks! pod 'Yams' end
  3. pod 'Yams' コード行を追加した後、AppCode は、ポッドファイルにまだインストールされていない pods が含まれていることを通知します。Yams pod をインストールするには、エディターの右上隅にある pods をインストールするリンクをクリックします。または、キャレットを pod 'Yams' に配置した状態で、Alt+Enter を押し、インストールを選択して、Enter を押します。

    Install pods

ライブラリがインストールされると、AppCode はプロジェクトをワークスペースとして自動的に再ロードします。

ステップ 3. リモート YAML からデータをロードする

このアプリケーションでは、会議データモデルがすでに存在します。iOSConferences/Model/Conference.swift。これには、iOSConferences/Resources にある conferencesData.json ファイルに保管されているデータに対応する一連のプロパティが含まれています。リモート YAML ファイルには同じ名前の属性が含まれているため、現在のモデルでは何も変更する必要はありません。

ただし、データの読み込みと解析のためにコードを更新する必要があります。URL セッションの結果を処理するために、結合(英語)フレームワークを使用して、データを解析します。専用の YAMLDecoder

Data.swift ファイルの現在のコードを次のように置き換えることができます。

import Foundation import Yams import Combine extension Date { func dateToString() -> String { let format = DateFormatter() format.dateFormat = "MMM dd, yyyy" return format.string(from: self) } } let url = URL(string: "https://raw.githubusercontent.com/Lascorbe/CocoaConferences/master/_data/conferences.yml") public class ConferencesLoader: ObservableObject { @Published var conferences = [Conference]() var result: AnyCancellable? public init() { loadConferences(completion: { conferences in self.conferences = conferences }) } func loadConferences(completion: @escaping ([Conference]) -> Void) { URLSession.shared.dataTaskPublisher(for: url!) // Make the DataTaskPublisher output equivalent to the YAMLDecoder input .map {$0.data} // Decode the remote YAML file .decode(type: [Conference].self, decoder: YAMLDecoder()) // Specify a scheduler on which the current publisher will receive elements .receive(on: RunLoop.main) // Erase the publisher's actual type and convert it to AnyPublisher .eraseToAnyPublisher() // Attach a subscriber to the publisher. // receiveCompletion: a close to execute on completion. Use it to handle errors. // receiveValue: a closure to execute when receiving a value. .sink(receiveCompletion: { completion in switch completion { case .finished: break case .failure(let error): print(error.localizedDescription) } }, receiveValue: { conferences in completion(conferences) }) } }

以下の変更の詳細な説明を参照してください。

1. データをロードするためのクラスを作成する

  1. iOSConferences/Model/Data.swift ファイルで、不要なコード loadFile(_:) 関数と conferencesData 変数を削除します。

  2. ObservableObject に準拠する ConferencesLoader という名前の新しいクラスを作成します。Conference オブジェクトの配列と空の loadConferences() メソッドを格納する conferences プロパティをこのクラスに追加します。

    public class ConferencesLoader: ObservableObject { @Published var conferences = [Conference]() func loadConferences() { }
  3. クラスに初期化子を追加します: キャレットをクラスブロック内に配置した状態で、Alt+Insert をクリックし、イニシャライザーを選択して、開いたダイアログで選択なしを選択します。

    Generate an initializer

    イニシャライザーから loadConferences() メソッドを呼び出します。

    public class ConferencesLoader: ObservableObject { @Published var conferences = [Conference]() public init() { loadConferences() } func loadConferences() { } }

2. データをロードするためのメソッドを実装する

  1. Data.swift ファイルで、Yams および Combine フレームワークをインポートします。

    import Yams import Combine
  2. loadConferences() メソッドで、URLSession.shared.dataTaskPublisher(for:)(英語) を呼び出して DataTaskPublisher を作成します。

    func loadConferences() { URLSession.shared.dataTaskPublisher(for: url) }
  3. キャレットを url に置き、Alt+Enter を押してグローバル変数「url」を作成するを選択します。このインテンションアクションにより、その使用箇所から直接グローバル変数を導入できます。

    リモート YAML ファイルへのリンクを変数の値として設定します。

    let url = URL(string: "https://raw.githubusercontent.com/Lascorbe/CocoaConferences/master/_data/conferences.yml") public class ConferencesLoader: ObservableObject { // ... }

    url パラメーターは赤でハイライトされます。Alt+Enter を押して、使用可能なクイックフィックスを確認します。'!' を使用して強制的にアンラップします。オプションの値に「nil」が含まれている場合に実行を中止するを選択します。これにより、url 変数の後に ! 文字が追加されます。

    func loadConferences() { URLSession.shared.dataTaskPublisher(for: url!) }
  4. リモート YAML ファイルを処理するためのコードを追加します。詳細については、コメントを参照してください。

    func loadConferences(completion: @escaping ([Conference]) -> Void) { URLSession.shared.dataTaskPublisher(for: url!) // Make the DataTaskPublisher output equivalent to the YAMLDecoder input .map {$0.data} // Decode the remote YAML file .decode(type: [Conference].self, decoder: YAMLDecoder()) // Specify a scheduler on which the current publisher will receive elements .receive(on: RunLoop.main) // Erase the publisher's actual type and convert it to AnyPublisher .eraseToAnyPublisher() // Attach a subscriber to the publisher. // receiveCompletion: a close to execute on completion. Use it to handle errors. // receiveValue: a closure to execute when receiving a value. .sink(receiveCompletion: { completion in switch completion { case .finished: break case .failure(let error): print(error.localizedDescription) } }, receiveValue: { conferences in completion(conferences) }) }

3. ロードされたデータをグローバル変数に保存する

  1. loadConferences() メソッドの内容を選択し、Ctrl+Alt+V を押して変数に抽出します。表示されるポップアップで、var で宣言するおよび明示的に型を指定するチェックボックスを選択します。ハイライトされた領域に変数名を入力し、Tab を押し、変数型を指定します。AnyCancellableEnter を押します。

    Extract variable
  2. 変数宣言をクラスレベルに移動します。キャレットが変数行に配置された状態で、Alt+Enter を押して宣言と代入に分割を選択します。

    Split into declaration and assignment

    ?AnyCancellable 型に追加してオプションにし、@Published var conferences = [Conference]() 行のすぐ下に result 変数宣言を配置します。

    public class ConferencesLoader: ObservableObject { @Published var conferences = [Conference]() var result: AnyCancellable? }
  3. loadConferences() メソッドが呼び出される初期化子で、クロージャ式をパラメーターとして渡します。

    public init() { loadConferences(completion: { conferences in self.conferences = conferences }) }
  4. 末尾のクロージャ構文を使用して、メソッドの呼び出しを簡略化することもできます。Alt+Enter を押して、末尾のクロージャに変換を選択します。

    Convert to trailing closure

ステップ 4. ビューにデータを渡す

  1. iOSConferences/ConferenceList.swift に移動します。

  2. ConferenceList ビュー内で、ConferencesLoader クラスのインスタンスを使用して @ObservedObject プロパティラッパーを追加します。

    struct ConferenceList: View { @ObservedObject var conferenceLoader = ConferencesLoader() var body: some View { // ... } }
  3. ロードされた会議のリスト(conferenceLoader.conferences)を List 初期化子に渡します。

    struct ConferenceList: View { @ObservedObject var conferenceLoader = ConferencesLoader() var body: some View { NavigationView { List(conferenceLoader.conferences) { // ... } } }
  4. Shift+F10 を押すか、ツールバーの App actions execute をクリックして、Shift+F10 アプリケーションを実行します。これで、アプリケーションはリモート YAML ファイルからの会議を表示します。

    The list of conferences loaded from the remote YAML file

関連ページ:

AppCode で SwiftUI アプリケーションを作成する

このチュートリアルでは、iOS 会議のリストを表示する簡単な SwiftUI アプリケーションを作成します。アプリケーションは 2 つのビューで構成されます。ローカル JSON ファイルからのデータを表す会議のリスト。各会議の詳細。その過程で、AppCode 機能に慣れ、対話的な SwiftUI プレビューを有効にする方法を学びます。ビデオチュートリアルを見て、以下のステップバイステップの手順に従ってください。ステップ 1. プロジェクトの作成:AppCode で作成されたプロジェクトは、Xc...

プロジェクトの作成と管理

プロジェクトは、完全なソフトウェアソリューションを表す組織単位です。これは、コーディング支援、一括リファクタリング、コーディングスタイルの一貫性などの基盤として機能します。AppCode は Xcode プロジェクトフォーマットを使用します。これにより、AppCode で既存の Xcode プロジェクトを開き、Xcode と互換性のある新しいプロジェクトを作成できます。すべての Xcode プロジェクトテンプレートは AppCode で利用可能です。新規プロジェクトを作成する:現在 AppCod...

コード補完

このセクションでは、コーディングプロセスのスピードアップを可能にするコンテキスト対応コード補完のさまざまなテクニックについて説明します。基本補完:基本コード補完は、可視性スコープ内のクラス、メソッド、キーワードの名前を補完するのに役立ちます。コード補完を呼び出すと、AppCode はコンテキストを分析し、現在のキャレット位置から到達可能な選択肢を提案します (提案にはライブテンプレートも含まれます)。基本補完を呼び出す名前の入力を開始します。デフォルトでは、AppCode は、入力時にコード補...

ライブテンプレート

ライブテンプレートを使用して、ループ、条件、宣言、print ステートメントなどの一般的な構造をコードに挿入します。コードスニペットを展開するには、対応するテンプレートの省略形を入力してを押します。を押し続けると、テンプレート内の 1 つの変数から次の変数に移動します。を押して、前の変数に移動します。必要な略語がわからない場合は、を押して、現在のコンテキストで使用可能なテンプレートのリストを開きます。ライブテンプレートの種類:次のタイプのライブテンプレートが区別されます。シンプルなテン

結果の取得と問題の解決

インスペクションがあなたのコードに問題を検出した場合、すぐにエディターで修正を適用することができます。ハイライトされたコード部分にキャレットを置き、を押します。ほとんどのインスペクションでは、AppCode はクイックフィックスの横に対話的なプレビューを表示します。を押すと、このプレビューを隠したり表示したりできます。問題ツールウィンドウで修正を適用する:インスペクションを手動で起動した場合は、解析が終了した後に自動的に開く問題ツールウィンドウで結果を調べることができます。検出された問題は

アプリケーションを実行する

AppCode を使用すると、実際のデバイスだけでなく、シミュレートされたデバイスでも iOS および tvOS アプリケーションを実行できます。macOS のアプリケーションは、AppCode がインストールされている現在の Mac で実行されます。実行 / デバッグ構成を選択する:AppCode では、Xcode スキームの類似物であり、それらと同期される実行 / デバッグ構成を使用してアプリケーションを実行します。AppCode で作成されたすべてのプロジェクトには、アプリケーションと同...