#はじめに
Swiftのバージョンが3になってからのPythonの呼び出しについての記事がなかったので自分で参考ページを調べてとりあえずやれるところまでやってみました。
参考ページ ※1年ほど前の記事なので注意!
#Xcode(Swift側)での操作
1.Creat a Xcode projectでmacOSのApplicationのCocoaApplicationを選択して
、プロジェクトを作成しましょう。
2.そして次に生成されたプロジェクトフォルダ内にあるAppDelegate.swiftの記述されている"NSApplicationMain"を消しましょう。
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. The main Python-(Swift) plugin bundle entry module"""
import logging
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)
logger.info("Loaded python bundle")
"""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"が生成されています。
5.生成された"dist"フォルダ内にある"Bridge.plugin"をXcodeのプロジェクト内に統合しましょう。 XcodeのプロジェクトでAdd Files to ~~~を選択して、"Bridge.plugin"を追加するだけ。
#実行
Xcode projectを実行してみましょう。
こんな感じにならOK!
ちなみにBridge.pyのlogger.infoがコンソールに出力されているはずです。
#とりあえず今回はここまで!
参考ページはまだ項目があるので引き続き行っていきます。