« 完全ペーパーレス化へ(電子保存まとめ) | トップページ | 平成27年4月パラ点数改定の伴う保険点数改定 »

2014年10月 2日 (木)

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 DepthAbout 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で正しく開発元の認証がおこなわれることが確認できます。

|

« 完全ペーパーレス化へ(電子保存まとめ) | トップページ | 平成27年4月パラ点数改定の伴う保険点数改定 »

カルテメーカー」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: Mac OSX 10.9.5 Gatekeeperへの対応:

« 完全ペーパーレス化へ(電子保存まとめ) | トップページ | 平成27年4月パラ点数改定の伴う保険点数改定 »