69749


# 「PythonKit」を導入したい

SwiftからPythonスクリプトを呼ぶために「PythonKit」を導入したいのです。以下のサイトを参考にしました。  
問題が発生しているのが手順４で、表示されるはずのApp Sandbox、Hardened Runtimeが表示されません。  
アプリ内検索等を使ってもどこにあるか見つけることができませんでした。

<https://qiita.com/john-rocky/items/906e54a976b4f0ae635a>

表示されないので、その手順を飛ばした場合、pythonがunresolved identifierとエラーが出ます。

# 発生している問題・エラーメッセージ

やりたいこと(<https://qiita.com/john-rocky/items/906e54a976b4f0ae635a> からの引用)  
[![画像の説明をここに入力](https://i.stack.imgur.com/T46Ta.jpg)](https://i.stack.imgur.com/T46Ta.jpg)

現在の状況  
[![画像の説明をここに入力](https://i.stack.imgur.com/cOA0p.jpg)](https://i.stack.imgur.com/cOA0p.jpg)

# 該当のソースコード

手順４を飛ばした状態でのソースコードです。(コメントアウトされているのがエラーメッセージです)  
pythonがunresolved identifierと出ます。

[code]

    override func viewDidLoad() {
        super.viewDidLoad()
     let sys = Python.import("sys")    //Use of unresolved identifier 'Python'
     sys.path.append("/Users/mlboy/PythonTest/") 
     let example = Python.import("example")   //Use of unresolved identifier 'Python'
     example.hello() 
    }
    
[/code]


CC BY-SA 4.0
2020-08-21T03:32:55.787
69747
2020-08-21T05:22:57.527
41577
question
python swift xcode
xcodeでApp Sandbox、Hardened Runtimeが表示されない


該当記事に沿って、新規プロジェクトを作成し、手順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を使いたいならこれくらいわかるでしょってことなんでしょうか。

[code]

    def hello():
        print("Hello PythonKit")
    
[/code]

なお、私の場合はこのファイルをデスクトップに作成しました。

`/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](https://github.com/pvieito/PythonKit)

> ...  
>  README.md  
>  ...
>
> ## Usage
>
> * * *
>
> ...
[code]

>     import PythonKit
>     ...
>  
[/code]

>
> ...

# PythonKitを使うSwiftソースには`import PythonKit`が必要なようです。

### ViewController.swift

[code]

    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.
            }
        }
    
    
    }
    
[/code]

当然、 **「example.pyのあるディレクトリへのパス」の行のディレクトリパスは、ご自分の環境に合わせて書き換えて下さい** 。

* * *

いかがでしょうか、Xcodeもバージョン毎に設定画面の内容や設定方法が微妙に変化していっているのですが、少なくとも現行の11.xを使っている限りは大きな差異はなく動くように出来ると思うのですが。


CC BY-SA 4.0
2020-08-21T05:14:12.850
69749
2020-08-21T05:22:57.527
2020-08-21T05:22:57.527
13972
13972
69747
answer