6

デバイスで iOS アプリ App1 に App2 を起動させたい場合、CFBundleURLName は Info.plist の CFBundleURLTypes の CFBundleIdentifier と一致する必要がありますか?

たとえば、App1にある場合

<key>CFBundleIdentifier</key>
<string>com.foo.App1</string>
...
<key>CFBundleURLTypes</key>
<array>
<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>fooscheme</string>
        </array>
        <key>CFBundleURLName</key>
        <string>com.foo.App1</string>
    </dict>
</array>

上記の場合、App2 は App1 で「fooscheme:」URL を起動できます。ただし、App1 の Info.plist を変更して含めると

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>fooscheme</string>
        </array>
        <key>CFBundleURLName</key>
        <string>com.foo.xyz</string>
    </dict>
</array>

つまり、CFBundleURLName != CFBundleIdentifier の場合、App2 は App1 で「fooscheme:」URL を起動できなくなります。

理由はありますか?

CFBundleIdentifier が CFBundleURLName と一致しなければならないという Apple のドキュメントは見当たりませんが、実際にはそうであるようです。または、何か不足していますか?

ありがとう!

4

2 に答える 2

7

いいえ、これら 2 つのプロパティは一致する必要はありません。あなたのように問題はありませんでした。アプリ識別子CFBundleIdentifiercom.djp.myappに設定し、url スキームを Nothing.like にCFBundleURLName設定しました。 the.identifierabcdCFBundleURLSchemesとしてのセット。

このアプリを開くには、次のように呼び出します。abcd://

問題を引き起こしている可能性があると考えられるのは、URL スキームを設定してアプリを実行し、テスト中にバンドル識別子 ( CFBundleIdentifier) を変更したため、実際にシステムに 2 つのアプリが存在するようになった場合です。この場合、URL スキームの競合が発生し、Apple はどのアプリが優先されるかを決定するプロセスはないと述べています。

: 同じ URL スキームを処理するために複数のサードパーティ アプリが登録されている場合、そのスキームをどのアプリに割り当てるかを決定するプロセスは現在のところありません。

また、私がテストして経験した限りでは、2 つの競合するアプリがある場合、最初にインストールされたアプリが使用されているように見えます。このアプリが削除されると、特定の URL スキームをサポートする唯一のアプリである 2 番目のアプリが削除されます。はまだ使用されていません。

これは、URL スキームがインストール時にシステムに登録されていることを示唆しており、これらのスキームで期待どおりに動作させるには、このアプリを新しくインストールする必要があります。

URL スキームの詳細については、Apple Advances App Tricksドキュメントを参照してください。

于 2013-01-31T13:37:22.837 に答える
2

その理由は、アプリケーションがビューアー、エディター、シェルなどであることを示す CFBundleTypeRole キーを特別に指定しなかったためだと思います。また、このキーはカスタム URL スキームで必要です。

注:None に設定すると、osx はアプリケーションを起動しません。

ここから情報を取得できますApple Developer Document

于 2013-04-09T14:43:32.100 に答える