クロスプラットフォームの C ライブラリから呼び出される Objective-C ライブラリに、いくつかの Cocoa 機能をラップする作業を行っています。私の目標の 1 つは、Linux で C で開発を行っている人に、XCode や nib ファイルなどを使用せずに OSX にデプロイできる機能を提供することです。コマンド ライン ツール、および通常のボタンなどを備えた通常のサイズ変更可能なメイン ウィンドウ、アプリケーション メニュー、および期待どおりの外観と動作のドック アイコンなどで終了します。
私はOSX 10.8.5に取り組んでいます。XCode 5.0 をインストールしました。ここに私のgcc --version
出力があります:
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.0 (clang-500.2.76) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin12.5.0
Thread model: posix
メイン ウィンドウを表示する方法、アプリケーション メニューを設定する方法、およびその他のさまざまなことをプログラムで、XCode や nib や plist を使用せずに理解しましたが、ドック アイコンで問題が発生しました。
次のように呼び出して、カスタム ドック アイコン イメージを設定します。
[NSApp setApplicationIconImage:dockImage];
ユーザーがアプリを終了すると、ドック アイコンの画像は別のもの (ある種の既定のアプリケーション アイコンまたはビュー) に一時的に戻り、その後消えます。XCodeを使用してペン先またはplistを作成せずに、どうすればそれを防ぐことができますか?
NSApp
アプリデリゲートのメソッドでアクティベーションポリシーを禁止に設定して、applicationShouldTerminate
このスイッチバックが発生する前にドックアイコンを非表示にしようとしました。それは役に立ちませんでした.ウィンドウとドックアイコンを非表示にしますが、ドックアイコンは、非表示プロセスの一環として、一時的にデフォルトのアイコンに戻ります. 戻ってこれをNSTerminateLator
確認し、アクティベーションポリシーを禁止に設定すると、アプリが終了していなくてもドックとアイコンが非表示になり、設定しないと非表示のままになることを確認しました.
呼び出しをサブクラス化NSApplication
してオーバーライドしようとしました。setApplicationIconImage
プログラムが終了する直前に、私のコード以外の何かによって(とにかく、または私のコードによって直接ではなく)、2回目に呼び出されていることを確認しました。スーパー関数を最初に呼び出すことで 2 回目の呼び出しが機能しないようにしようとしましたが、2 回目はそうではありませんでした。その関数のコードが私のコードがアプリケーション アイコンを変更するのを防ぐことができることを確認しましたが、それはしませんでした。問題を解決しません。とにかく、どういうわけか、それはまだ起こります。
次のように、アプリケーション バッジの削除も試みました。
[[window dockTile] setShowsApplicationBadge: NO];
念のためそれが関係していましたが、うまくいきませんでした。ドキュメントによると、アプリ バッジは 10.6 の時点で関連性がなくなっていますが、私はストローをつかんでいました。
プログラムの最前線で困惑しているので、XCodeを使用せずに.appを最初からパッケージ化する方法を見つけようとしており、アプリケーションイメージへの参照を含むplistを最初から作成できるかどうかを確認しています。しかし、展開の OSX 固有のパッケージングに含まれるものを最小限に抑えたいので、プログラムによるソリューションが望ましいでしょう。
もう 1 つの可能性は、XCode を 1 回使用して、デプロイ スクリプトがコピーおよび変更する非常に一般的なベアボーン .app を生成することです。
私の質問を「広すぎる」、「建設的でない」、またはそのようなものとして撃ち落とさないでください。すでにさまざまな形で存在する車輪を再発明していることはわかっていますが、より良いネズミ捕りを作ろうとすること、あるいは単に別の、またはさらに悪いネズミ捕りを作ろうとすることを禁じる法律はありません。多くの人が取るに足らないと考える問題を修正しようとしていることは理解していますが、XCode で作成されたアプリにはこの問題はありません。そのようなアーティファクト。私は、Apple のツール チェーンを否定したり、私が追求しているものを追求すべきかどうかについて議論を招いたりするつもりはありません。解決策を探している特定の技術的な問題があり、それは私の目標の制約内にあります。