Mac OSX 10.9.5 Gatekeeperへの対応
かねてからアナウンスされていた新しいCode Signingについて備忘録としてまとめておきます。
OSX 10.9より前のCode SigningはVersion1と呼ばれる形式でしたが、OSX10.9からはVersion2と言う形式に変更になりました。それでも10.9.5より前までは、Version1でもVersion2でも正しい署名とされていたのですが、10.9.5からはVersion1は正しい署名と認識されないようになりました。
Version1とVersion2の大きな違いは署名する深さです。
Version1では全体をまとめて署名していましたが、Version2では、内包される個々のフレームワークやコードについて個々に署名をした上で全体を署名する必要があります。
Xcodeを使ってネイティブなアプリを開発している場合は、プロジェクトの設定を変更して再ビルドすることで署名できるようですが(試したことがないので確認はしていません)、4Dのアドオンとして開発している場合は、4Dでビルドしたアプリケーションをcodesignというツールを使って後から署名する必要があります。
OS10.9以上のcodesignで再署名を行うと自動的にVersion2で署名されるのですが、実はこの深さの問題で以前と同じように署名したのでは正しく署名できません。
詳細はOS X Code Signing In DepthとAbout Code Signingです。でも、読んでもいまいちよくわからないというか...(^^;
で、いろいろ試したみた結果です。4D v13の場合です。
Code Signingが必要なコードは、Info.plistファイルのCFBundleNameキーに記述されたコードということで、4Dの場合、Contents:Frameworks:フォルダに含まれるコードが対象となります。実際に署名をするのは、個々のフレームワークのVersionsフォルダの中の実体のあるフォルダ(A)です。
ただ4Dの場合、フレームワークが20個もありますので、ビルトする度にすべてに署名をするのは現実的ではありません。でも大丈夫、組み込みエンジンである4D Volume Desktopに対して署名をしておけば署名したフレームワークがビルトしたアプリケーションにコピーされますので、事前に必要な署名を済ませておけます。
具体的にはターミナルを起動して
対象ディレクトリを4D Volume Desktopにして、
codesign -f -s "Developer ID Application:xxxxxx" Contents/Frameworks/4DJavaScript.framework/Versions/A
と実行します。
同様に
codesign -f -s "Developer ID Application:xxxxxx" Contents/Frameworks/4DJavaScriptCore.framework/Versions/A
codesign -f -s "Developer ID Application:xxxxxx" Contents/Frameworks/4DWebCore.framework/Versions/A
・
・
・
とContents:Frameworks:フォルダに含まれる全てのフレームワークに対しておこないます。
あと必要なのはContents:MacOSフォルダの中の「HelperTool」と「InstallTool」です。こちらも
codesign -f -s "Developer ID Application:xxxxxx" Contents/MacOS/HelperTool
codesign -f -s "Developer ID Application:xxxxxx" Contents/MacOS/InstallTool
という感じに署名します。
このフォルダに含まれる4D Volume Desktop.4DEはコピーされませんので署名の必要はありません。
ビルトされたアプリケーションのContents:MacOSフォルダには、アプリケーション名と同名の実行ファイルがありますが、これに署名する必要はありません。
ここで注意するのはアプリケーションで使う独自のリソースというかファイルです。これらをContents:フォルダ直下においておくと、これらにも署名が必要といわれるのですが、実は署名しても正しく処理されません。このようなファイルが存在するとGatekeeperはこのアプリケーションは破損しているのでゴミ箱に捨ててくださいという警告をだして、さらに厄介な事になります。
回避方法は簡単で、Contents:フォルダ直下に適当な名前のフォルダを作成してその中に独自のファイルを置きます。要はContentsフォルダにはInfo.plistファイル以外の生のファイルを置かなければ大丈夫ということです。
このようにして4D Volume Desktopに署名をしたら、いつも通りアプリケーションをビルドします。
ビルドしたら改めてアプリケーション全体に以前と同じように
codesign -f -s "Developer ID Application:xxxxxx" カルテメーカー.app
こんな感じに署名します。
で、
codesign -dvvv カルテメーカー.app
と実行して署名を確認して
・
Sealed Resources version=2 rules=xx files=xxxx
・
と表示されればversion2であることが確認できます。
また
spctl -a -t exec -vv カルテメーカー.app
と実行して
カルテメーカー.app: accepted
source=Developer ID
origin=Developer ID Application: xxxxxx
と結果が表示されればGatekeeperで正しく開発元の認証がおこなわれることが確認できます。
| 固定リンク
「カルテメーカー」カテゴリの記事
- マイナ保険証による公費情報の取得について(PMHへの対応)(2024.11.28)
- 医療DX加算改定に伴う設定について(2024.10.01)
- 長期収載品の選定療養導入に伴なう処方入力の変更について(2024.09.29)
- 訪問診療でのオンライン資格確認方法(居宅同意取得型)(2024.06.11)
- カルテメーカーのペーパーレス運用について(2024.04.29)
コメント