fileをDockへdropしたときに起動するアプリを作る過程で、アイコンが踊るときと踊らないときがあったので調査してみました。
環境
- os: macOS Mojave
- Python: 3.9
- py2app: 0.27
結果
# setup.py
OPTIONS["argv_emulation"] = {"argv_emulation": True}
というコードをsetup.pyに挿入してdrag and dropを有効にすると、アイコンが踊るの止めることができました。
追加調査
生成されたapp folder内のpython fileの以下のコードをコメントアウトするとアイコンが踊りだすことを確認
# dist/helloworld.app/Contents/Resources/__boot__.py
while running[0] and now - start < timeout[0]:
event = ctypes.c_void_p()
sts = carbon.ReceiveNextEvent(
1,
ctypes.byref(eventType),
start + timeout[0] - now,
TRUE,
ctypes.byref(event),
)
if sts == eventLoopTimedOutErr:
break
elif sts != 0:
print("argvemulator warning: fetching events failed")
break
sts = carbon.AEProcessEvent(event)
if sts != 0:
print("argvemulator warning: processing events failed")
break
"carbon.ReceiveNextEvent " という関数が原因だと思いますが深みにはまりそうだったので調査を打ち切りました。
wiki: Carbon(カーボン)は、Classic Mac OSのToolbox API (Application Programming Interface) をMac OS X用に整理・移植したAPIであり、Classic Mac OS用アプリケーションをMac OS X向けに移植しやすくするために開発された。
その他
調査に使ったapp生成用file
# helloworld.py
print('hello')
import time
time.sleep(4)
print('end')
# setup.py
from setuptools import setup
APP = ['helloworld.py']
DATA_FILES = []
OPTIONS = {}
OPTIONS["argv_emulation"] = {"argv_emulation": True}
setup(
app=APP,
data_files=DATA_FILES,
options={'py2app': OPTIONS},
setup_requires=['py2app'],
)
terminal上で実行した生成コマンド
python setup.py py2app
備考
システム環境設定>Dock>起動中のアプリケーションをアニメーションで表示 のチェックボックスをOFFにすることでアイコンが踊るのを止めることができるので、ユーザ側で対処することも可能