質問: Python.import("example") //Use of unresolved identifier 'Python' example.hello() } ```
回答: 該当記事に沿って、新規プロジェクトを作成し、手順5までを実施してみました。 概ね(*)記事の通りにやれば手順5の動作確認までは出来るようです。 (*)初心者向けに微に入り細を穿つような事細かな記述はされていないので、常識的なことは自分で補ってやる必要があります。 なお、確認はXcode 11.6, macOS Catalina (10.15.5)で行いました。「記事通りの操作でうまくいかない」的な質問をされる場合には、ご自身の環境を質問に含めておくようにして下さい。 ### 手順「2、 Branch:masterを選択します。」について 選択した後、「Choose package products and targets:」なんて画面が表示されるのに、記事内には何も説明がありませんでした。ここはデフォルトのままで「Finish」で大丈夫のはず。 ### 手順「3、Pythonファイルを作成します。たとえば、「example.py」と書きました。↓」 ここに表示されているPythonのコードが壊れてます。 * 一部記号が全角になっている * 最後の行に不要な`}`がある PythonKitを使いたいならこれくらいわかるでしょってことなんでしょうか。 ``` def hello(): print("Hello PythonKit") ``` なお、私の場合はこのファイルをデスクトップに作成しました。 `/Users/dev/Desktop/example.py`というファイルが存在する状態になっています。 (`dev`は私のユーザ名なので、当然ながらあなたのMac上のデスクトップにあるファイルのパスとは異なります。) ### 手順「Xcodeプロジェクトのセッティング「TARGETS→Signing&Capabilities」で、以下の設定をします。」 > > * アプリのサンドボックスではなくMacのファイルにアクセス > > > 「アプリのサンドボックスではなくMacのファイルにアクセス」という言い方が何を言っているのかがさっぱりわからないのですが、要はアプリのSandbox化を無効にしろということなんだろうと思います。 なお、**Xcode 11.6でmacOSアプリのプロジェクトを作成したら、App Sandboxの設定画面は「Signing&Capabilities」に初めから存在していました**。 何らかの理由で表示されないのなら、既にSandbox化が無効になっていると言うことなんで、**飛ばしても問題ありません**。 > > * ライブラリの検証を無効 > > > こっちは、Xcode 11.6だと、**Hardened Runtime**の設定画面は初期状態では存在しませんでした。 こんなもの必要ないんじゃないかと思ってすっ飛ばしたところ、**特に手順5のテスト実行を行うのに問題はありませんでした**。 どうしても手順通りにやりたいなら、左上の「+ Capability」をクリックすると、「Hardened Runtime」がリストに現れるはずなので、追加して設定して下さい。 ### 手順「5、ViewControllerからPythonファイルを呼び出します。」および、あなたの「該当のソースコード」について PythonKitを使おうとする人はPyhtonKitのドキュメントくらいは読んでいるはずと言うことのようです。 PythonKit > > ... > > README.md > > ... > > > Usage > ----- > > > > > --- > > > ... > > > > ``` > import PythonKit > ... > > ``` > > ... > > > PythonKitを使うSwiftソースには`import PythonKit`が必要なようです。 ================================================= ### ViewController.swift ``` import Cocoa import PythonKit //<- class ViewController: NSViewController { override func viewDidLoad() { super.viewDidLoad() let sys = Python.import("sys") sys.path.append("/Users/dev/Desktop/") //<- example.pyのあるディレクトリへのパス let example = Python.import("example") // パイソンファイルをimport example.hello() // Pythonのファンクションをよぶ } override var representedObject: Any? { didSet { // Update the view, if already loaded. } } } ``` 当然、**「example.pyのあるディレクトリへのパス」の行のディレクトリパスは、ご自分の環境に合わせて書き換えて下さい**。 いかがでしょうか、Xcodeもバージョン毎に設定画面の内容や設定方法が微妙に変化していっているのですが、少なくとも現行の11.xを使っている限りは大きな差異はなく動くように出来ると思うのですが。