独自のプロジェクトから独自のクラスを Playground にインポートする方法
-
21-12-2019 - |
質問
次のようなセットアップを想定します。
- Xcode 6 プロジェクトがあり、Objective-C と Swift の両方を使用して独自のクラス (MyView と MyViewController など) を実装しています。
- プロジェクトにプレイグラウンドを追加しました
Playground では、次のようなモジュール (フレームワーク) をインポートすることができます。 UIKit
とともに import
キーワード。Playground からプロジェクトの他のクラスにアクセスできるようにするにはどうすればよいですか?
プロジェクト クラスに直接アクセスしようとすると、次のエラー メッセージが表示されます。未解決の識別子「MyView」の使用
解決
Xcode 6.0 Beta 5以降、あなた自身のフレームワークを遊び場にインポートすることが可能です。これにより、アプリケーションと遊び場の間でコードを共有する方法があります。これは、フレームワークをインポートできます。これを行うには:
-
あなたの遊び場はあなたのフレームワークを作成するプロジェクトと同じワークスペースになければなりません。ワークスペースには、事前に構築されたフレームワークを使用するのではなく、フレームワークを作成するターゲットを含める必要があります。
-
あなたはすでにあなたのフレームワークを作成していなければなりません。 IOSフレームワークであれば、64ビット実行先(例えばiPhone 5S)用に構築する必要があり、シミュレータ用に構築する必要があります。
-
少なくとも1つのターゲットを構築するアクティブなスキーム(ターゲットのビルドロケーションが遊び場のフレームワーク検索パスで使用されます)を持つ必要があります。
-
あなたの「ビルド位置」設定(詳細な "xcodeの設定"の設定 "Regacy"に設定しないでください。
-
あなたのフレームワークがswiftフレームワークでない場合は、 "定義モジュール"ビルド設定を "yes"に設定する必要があります。
-
フレームワークの遊び場にインポートステートメントを追加する必要があります。
これらすべての条件が満たされたら、フレームワークをインポートすると遊び場で機能します。
Xcode 7では、フレームワークをインポートするのではなく、自分のクラスをソースとしてインポートするために使用できる別のメカニズムが導入されました。この「補助ソース」を読むことができます。 http://help.appleで読むことができます。 COM / XCODE / MAC / 8.0 /#/ devfa5bea3af
他のヒント
実際にこれを行うことで、現在のプロジェクト内の他の Swift ファイルを参照することができました。
- 空のプレイグラウンドを作成し、プロジェクトの下のどこかに配置します。
- を開きます。
YourPlayground.playground
ターミナルでバンドル (はい、バンドル = ディレクトリです)。 - 編集
contents.xcplayground
たとえばvi
次のような別のセクションを追加します。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <playground version='3.0' sdk='iphonesimulator'> <sections> <code source-file-name='section-1.swift'/> <code source-file-name='section-2.swift'/> </sections> <timeline fileName='timeline.xctimeline'/> </playground>
- 名前の変更
section-1.swift
にsection-2.swift
(プレイグラウンドを最初から作成した場合は、サンプルがあるはずですsection-1.swift
バンドル内) - 追加 ハードリンク (シンボリックリンクが機能していないようです)
section-1.swift
これは、バンドルの外側で次のような Swift クラス ファイルを指します。
ln ../../Classes/MyView.swift section-1.swift
- Xcode を閉じて、プレイグラウンドを再度開きます。
- これで 2 つのセクションができます。1 つは Swift クラス ファイルの内容で、もう 1 つは Playground を最初から作成して得たサンプル コンテンツです。
この方法で実際にプレイグラウンドの外側にあるコードを実行できますが、このように実行すると Xcode が頻繁にクラッシュするようです。
編集:
Xcode 6 beta 5 では、Rick Ballard が著書で説明しているように、プロジェクト ファイルを参照できるようになりました。 答え.
Xcode 6のベータ5以来、コードがフレームワークにある場合はコードをインポートすることが可能です。あなたがする必要があるのはフレームワークのターゲットを作成し、そこにあるswiftファイルを追加し、あなたの遊び場でdo
import ModuleName
.
ビルド設定でモジュール名を調べることができます。通常はターゲット名と同じです。
public
を参照したいコードを作成してください。遊び場で変更が入手可能になる前にプロジェクトを構築する必要があります。(再実行をトリガーするために遊び場を編集する必要があります。)
重要
遊び場ファイルにターゲットと同じ名前を付けないでください。そうした場合、インポートは機能するように思われますが、遊び場が実行しようとしたときに次のエラーが発生します。
遊び場の実行に失敗しました:エラー:シンボルを検索できませんでした:
私はその中で1時間を無駄にしました。:)
Sources
フォルダの私のすべてのSwiftファイルへのリンクを置くただ:
cd /path/to/project/MyPlayground.playground/Sources
ln -s ../../*.swift .
.
このようにしてソースファイルの変更はすぐにあなたの遊び場で有効になります。非常にきれいに働きました。
Xcode 8.2、Swift 3.0.1、Macos Sierra
あなたがしなければならないのは - 初めに書く:
import ModuleName
.
(遊び場がフレームワーク/プロジェクトと同じワークスペースに配置されていると仮定)
うまくいかない場合:
-
あなたのプロジェクトを再構築する
-
再作成し、遊び場を再作成し、古い遊び場からすべてコピーします
init and implesとimplics を失敗した奇妙なエラーが多い!