iphone や mac などのデバイスからフレームワークが誤って削除された場合はどうなりますか? という質問を受けました。
アプリケーションがクラッシュするか、エラーなしで動作するか?
説明付きで答えてください。
iphone や mac などのデバイスからフレームワークが誤って削除された場合はどうなりますか? という質問を受けました。
アプリケーションがクラッシュするか、エラーなしで動作するか?
説明付きで答えてください。
リンクエラーが発生する場合があります。フレームワーク フォルダーがアプリケーション内にある場合は、そのランタイム リンクを意味します。
OS X は、各動的ライブラリ内に「インストール名」を埋め込みます。このインストール名は、dyld がライブラリをロードする必要があるときにライブラリが見つかる場所へのパスです。動的ライブラリにリンクするアプリケーションをビルドすると、このインストール名がアプリケーション バイナリにコピーされます。アプリケーションが実行されると、コピーされたインストール名を使用してライブラリまたはフレームワークが検索されます。
$ otool -D /Applications/Google\ Drive.app/Contents/Frameworks/Python.framework/Versions/2.6/Python
/Applications/Google Drive.app/Contents/Frameworks/Python.framework/Versions/2.6/Python:
@executable_path/../Frameworks/Python.framework/Versions/2.6/Python
そのため、Frameworks フォルダーを削除すると、Dyld エラーが発生します。
Dyld Error Message:
Library not loaded: @loader_path/../Frameworks/Sparkle.framework/Versions/A/Sparkle
Referenced from: /Applications/Transmission.app/Contents/MacOS/Transmission
Reason: image not found
フレームワークが削除された場合、そのフレームワークにリンクしているソフトウェアのみが影響を受けます。それがシステム フレームワークである場合は、システムに障害が発生することを想定してください。サードパーティのフレームワークであれば、影響範囲を限定する必要があります。それがアプリ バンドルにあり、アプリがコード署名されている場合、バンドルされたフレームワークを削除するとアプリが起動しなくなります。
削除したフレームワークにアプリケーションがアクセスする必要があるかどうかによって異なります。アプリケーションがフレームワークを必要とする場合、コンパイルされません。必要ない場合は、通常どおりコンパイルされます。