6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

iOS17 Xcode15 xcframeworksでのSDKコード署名の仕組み

Last updated at Posted at 2023-09-15

デジタル署名検証

Xcodeによるデジタル署名検証は、アプリ開発者がアプリを保護し、依存関係のSDK作成者が配布するSDKを保護します。
SDKを開発する場合、誰もSDKを変更したり改ざんしたりできないようにする必要があります。

08.png
コード署名の仕組みと、SDK開発者IDを使用してSDK内に署名がどのように含まれるかについて説明します。

コード署名の仕組み:xcframeworkの作成

アプリで使用できる依存関係タイプはxcframeworkとなります。

01.png
コード署名は、以下を開発者のIDと暗号的にリンクするメカニズムです。

・最終的にコンパイルされたバイナリ
・フレームワークのInfo.plist
・プライバシー マニフェストなどの関連メタデータ

or

・特定の種類の配布の場合はソースコード自体

コード署名の仕組み:CDハッシュ(xcframework)を作成

03.png
コード署名は、コンパイルされたバイナリのコードディレクトリハッシュ(CDHashとも呼ばれる)を最初に生成することによって機能します。

SDK開発者IDを使用してSDK内に署名がどのように含まれるか

04.png
このハッシュに署名するには、SDK開発者ID(開発者証明書 + 秘密キー&公開キー)を使用します。
署名が特定の時点で生成されたことを検証するために使用される安全なタイムスタンプと組み合わせます。
xcframeworksでは、署名は _CodeSignatureディレクトリ 内にあります。

これにより、SDKを改ざんすると署名は無効になります。
また、アプリ開発者は、署名に埋め込まれた証明書を使用して、署名したのがあなたであることを検証することもできます。

署名ステータスは、Xcode15から確認できる

05.png
Xcodeでは、以下のアプリ内に含めたxcframeworksの署名ステータスを示します。

  • Apple Developer Program IDによって署名されている(Apple Developer Program)
  • 自己署名証明書によって署名されている(Self Signed)
  • 現在まったく署名されていない

さらに、Xcodeは、xcframeworkを初めて使用するときにIDを記録し、それが後のビルド中に変更されないことを確認します。

Apple Developer Program IDの場合:
Appleは、使用されている証明書の有効性(失効しているかどうかなど)を確認し、複数の開発者が同じ名前で登録できないようにすることができます。

自己署名証明書の場合:
アプリ開発者はその有効性と信頼性を依存関係の作成者に直接確認する必要があります。

署名証明書の有効期限切れ or 不正な場合は、Xcodeからアラート表示

07.png

Apple Developer Program IDの場合:
Xcodeはビルド時にそれを検証し、署名が有効でない場合、IDが変更された場合、または証明書の有効期限が切れた後にxcframeworkが署名された場合にアラートを表示します。
有効期限が切れると、Xcodeは新しい証明書が同じ開発者からのApple Developer Program IDであれば自動的に検証してくれます。:thumbsup_tone2:

自己署名証明書の場合:
Xcodeは証明書のSHA-256フィンガープリントを以前にプロジェクトに追加されたフィンガープリントと比較します。
IDが変更された場合、または依存関係の内容が変更された場合はアラートが表示されます。
その場合、xcframework作成者がこの情報をパブリックな場所でアナウンスするか、xcframework作成者に連絡して、フィンガープリントが使用したものと一致することを確認する。

Xcodeは、Apple Developer Program証明書がAppleによって悪意がある開発者アカウントに対して取り消された場合にもアラート表示します。

SDK(xcframeworks)に署名する方法

以下の通りXCFramework作成後に、codesignコマンドでXCFrameworkに署名する

echo "Build Archive Device Slice"
xcodebuild clean archive -sdk iphoneos -destination 'generic/platform=iOS'[...]
echo "Build Archive Simulator Slice"
xcodebuild clean archive -sdk iphonesimulator -destination 'generic/platform=iOS Simulator' [...]
echo "Create XCFramework"
xcodebuild -create-xcframework [...] -output <YOUR.xcframework>
echo "Codesign XCFramework"
codesign --timestamp -v --sign "<YOUR CERTIFICATE (ABCXYZ)>" "<YOUR.xcframework>"

Apple Developer Program IDで、SDK(xcframeworks)に署名するcodesignコマンド例

codesign --timestamp -v --sign "Apple Distribution: Truck to Table (UA527FUGW7)" BirdFeeder.xcframework

Apple Developer Programのメンバーでない場合は、自己署名証明書を生成し、それをcodesignコマンドで使用してxcframeworkが自分によって署名されたことを確認できるように、自己署名証明書のフィンガープリントをSDKクライアントと共有する責任があります。
これにより、アプリにSDKを組み込む開発者は、Xcodeに含まれる新機能を使用して、xcframeworkがあなたによって署名されたことを確認できます。

Apple解説動画

デジタル署名を使用してアプリの依存関係を検証する

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?