Xcode
Python3
Swift3.0

Swift3でPython3を呼び出してみた!

More than 1 year has passed since last update.

はじめに

Swiftのバージョンが3になってからのPythonの呼び出しについての記事がなかったので自分で参考ページを調べてとりあえずやれるところまでやってみました。
参考ページ ※1年ほど前の記事なので注意!

Xcode(Swift側)での操作

1.Creat a Xcode projectでmacOSのApplicationのCocoaApplicationを選択して
、プロジェクトを作成しましょう。

2.そして次に生成されたプロジェクトフォルダ内にあるAppDelegate.swiftの記述されている"NSApplicationMain"を消しましょう。
スクリーンショット 2017-07-06 17.02.37.png

3.プロジェクト内に"main.swift"という名前でファイルを作成しましょう。
※ちなみにファイル名を"Main.swift"という名前にしたらエラーを吐かれました。
そして以下のコードを記述しましょう。
参考ページのコードを書くとエラーを吐くので対応)

import Cocoa

let path = Bundle.main.path(forResource: "Bridge", ofType: "plugin")
guard let pluginbundle = Bundle(path: path!) else {
    fatalError("Could not load python plugin bundle")
}
pluginbundle.load()

NSApplicationMain(CommandLine.argc, CommandLine.unsafeArgv)

Python3側の操作

1.ターミナルで以下のコマンドを実行

$ pip3 install pyobjc py2app

2.Xcodeのファイルパスが色々と面倒なので作成したXcode project内にPythonファイル及びフォルダを作成しましょう。

3.フォルダの構成とpythonファイルは以下のとおり
構成:setuptools/py2app
py2appフォルダ内に"Bridge.py"と"setup.py"を作成

Bridge.py
"""Bridge.py. The main Python-(Swift) plugin bundle entry module"""
import logging

logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)

logger.info("Loaded python bundle")
setup.py
"""Setuptools setup for creating a .plugin bundle"""
from setuptools import setup


APP = ['Bridge.py']
OPTIONS = {
  # Any local packages to include in the bundle should go here.
  # See the py2app documentation for more
  "includes": [],
}

setup(
    plugin=APP,
    options={'py2app': OPTIONS},
    setup_requires=['py2app'],
    install_requires=['pyobjc'],
)

4.その後ターミナルで以下のコマンドを実行

python3 setup.py py2app -A

参考ページでは

python setup.py py2app -A

となっていましたがエラーを吐きました。なのでpython3で実行コマンドを行ってください。

実行が成功するとターミナルの実行結果の最後に"Done!"と表示されます。

そうするとsetuptools/py2app/のフォルダ内に"build"と"dist"というフォルダが生成されています。そして以後記述しますが"dist"のフォルダ内に"Bridge.plugin"が生成されています。
スクリーンショット 2017-07-06 17.35.55.png

5.生成された"dist"フォルダ内にある"Bridge.plugin"をXcodeのプロジェクト内に統合しましょう。 XcodeのプロジェクトでAdd Files to ~~~を選択して、"Bridge.plugin"を追加するだけ。

実行

Xcode projectを実行してみましょう。
こんな感じにならOK!
スクリーンショット 2017-07-06 17.48.41.png
ちなみにBridge.pyのlogger.infoがコンソールに出力されているはずです。

とりあえず今回はここまで!

参考ページはまだ項目があるので引き続き行っていきます。