1

Objective-C アプリケーションからいくつかの Twisted 機能を使用するために Python/PyObjC バンドルを作成しています。

Python アプリに Core Foundation リアクターをインストールする必要があります。

from twisted.internet import cfreactor
cfreactor.install()

問題は、py2app でバンドルをビルドすると、必要な CFNetwork フレームワークがバンドル内に表示されず、Objetive-C アプリケーションからバンドルをロードするとクラッシュすることです。

CFNetwork フレームワークを強制的にリンクする方法はありますか? このフレームワークが自動的に追加されないのはなぜですか?

4

1 に答える 1

2

自動的に検出されないパッケージを含めるのは簡単です: 不足しているモジュールを setup.py ファイルに追加するだけです:

setup(
   ...
   options=dict(
      py2app=dict(
        includes=["module1", "module"],
      ),
   ),
   ...
)

CFNetwork が自動的に含まれない理由はわかりません。cfreactor のコードは、このように py2app を混乱させるべきではありません (つまり、インポートは通常のインポート ステートメントを使用して行われ、C コードやインポート呼び出しに隠されません)。

小さなサンプル プロジェクト (簡単な SystemPreferences プラグインなど) を使用してその問題を再現できますか? これにより、問題のデバッグがはるかに簡単になります。

また、Twisted、PyObjC、py2app のどのバージョンを使用していますか?

于 2013-02-19T15:57:42.627 に答える