21

プロジェクトの 1 つで Swift 3.0 を試してみたいだけです。Xcode は移行ウィンドウを開き、Swift 3.0 を使用するようにプロジェクトを更新します。

問題は、プロジェクトを更新したいだけで、pod install再実行後に変更が破棄されるため、Pods プロジェクトをそのままにしておくことです。

誰もがすでにその解決策を持っていますか?

4

4 に答える 4

28

あなたが求めていることは不可能です。Xcode は、Cocoapods の依存関係とプロジェクトをビルドします。Swift 2.x と Swift 3 のコードを同じプロジェクトに混在させたり、Swift 2.x で記述された Swift 3 で Cocoapod を使用したりすることはできません。

于 2016-06-14T20:48:25.847 に答える
5

podfile の最後で次のコマンドを使用するだけで、pods ファイルがセットアップされ、フレームワークが Swift 3 コンパイラまたはレガシー コンパイラを自動的に取得するようになります。

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['SWIFT_VERSION'] = '3.0'
    end
  end
end

これを使用して、次のポッドファイルの例を見てください。end ステートメントが上で書いたブロックの前にないことを確認してください。

platform :ios, '8.0'
use_frameworks!

target 'Project 1'

pod 'FacebookCore'
pod 'FacebookLogin'
pod 'FacebookShare'

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['SWIFT_VERSION'] = '3.0'
    end
  end
end
于 2017-01-22T18:23:25.467 に答える
4

これはSwift移行ガイドに役立つかもしれません

Swift.orgから直接

Carthage/CocoaPods プロジェクトの使用

Xcode ワークスペースでプロジェクトと一緒にビルドされていない他のプロジェクトのバイナリ Swift モジュールを使用している場合は、次の移行戦略のいずれかを選択できます。

  1. プロジェクトのソース コードを Xcode ワークスペースに含める このアプローチでは、独自のプロジェクトと共にオープンソース プロジェクトをビルドおよび移行します。
  2. Xcode 7.3[.1] を使用して必要な変更を行い、プロジェクトがすべて正しくビルドおよびリンクされていることを検証します。
  3. ワークスペースに他の Xcode プロジェクト ファイルを含め、プロジェクトが依存するターゲットをビルドするためのスキームをセットアップします。Carthage のビルド フォルダー内でバイナリ Swift モジュールを見つけるためのフレームワーク検索パスを設定している場合は、検索パスを削除するか、ビルド フォルダーを消去して、Xcode ワークスペースからビルドされた Swift モジュールのみを使用していることを確認してください。

アップストリームのオープンソース プロジェクトが Swift 2.3 または Swift 3 に更新されるまで待ちます

プロジェクトを移行するには、次のワークフローに従うことができます。

  1. Xcode 7.3 でビルドされているプロジェクトを維持する
  2. 移行アシスタントを呼び出して、提案されたソースの変更を自分のプロジェクトにのみ適用します (Swift 2.3 または Swift 3 の場合)。
  3. ビルドを試みる前に、Carthage/CocoaPods 依存関係ファイルを変更し、Swift 2.3 または Swift 3 に移行されるプロジェクトの特定のタグ/ブランチを指定します。依存関係を更新し、更新された依存関係とマイグレーターから取得したソースの変更を使用してプロジェクトをビルドしてみてください。
于 2016-07-31T09:32:50.850 に答える