Должен ли CFBundleURLName соответствовать CFBundleIdentifier?

Если я хочу, чтобы приложение App App iOS запускало App2 на устройстве, нужно ли CFBundleURLName сопоставлять CFBundleIdentifier в CFBundleURLTypes в Info.plist?

Например, если у меня есть в 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>
</array>

В приведенном выше случае App2 может запускать URL-адреса "fooscheme:" в App1. Однако, если я изменяю 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>

i.e, CFBundleURLName!= CFBundleIdentifier, то App2 больше не может запускать URL-адреса "fooscheme:" в App1.

Любые идеи, почему?

Я не вижу никакой документации Apple, что CFBundleIdentifier должен соответствовать CFBundleURLName, но это, похоже, имеет место на практике. Или я что-то упускаю?

Спасибо!

2 ответа

Нет, эти два свойства не должны совпадать, у меня не было проблем с этим, как и у вас, у меня был идентификатор моего приложения - CFBundleIdentifier - установлен на com.djp.myapp и схемы URL, установленные с CFBundleURLName, установлены в Nothing.like.the.identifier и a CFBundleURLSchemes как abcd.

Я мог бы открыть это приложение, позвонив: abcd://

Единственное, что я могу подумать, может создать для вас проблему, если вы запустили приложение с установленными схемами URL-адресов, и во время тестирования вы изменили свой идентификатор пакета (CFBundleIdentifier), тем самым фактически создав 2 приложения в системе. В этом случае у вас возникнет конфликт схемы URL-адресов, и Apple заявит, что нет никакого процесса определения того, какое приложение будет приоритетным.

Примечание. Если более одного стороннего приложения регистрируются для обработки того же URL-схема, в настоящее время нет процесса определения того, какое приложение будет предоставлена ​​эта схема.

Кроме того, насколько я проверял и испытал, если у вас есть два конфликтующих приложения, это первый установленный, который используется, и когда это приложение удаляется, второе приложение, которое теперь является единственным приложением, поддерживающим конкретная схема URL еще не используется.

Это указывает на то, что схемы url регистрируются в системе во время установки, и для ее работы над этими схемами требуется новая установка этого приложения.

Подробнее о схемах URL-адресов читайте в документе Apple Advances App Tricks.


Я думаю, причина в том, что вы не использовали ключ CFBundleTypeRole, который указывает, что приложение является средством просмотра, редактором, оболочкой или другим. И этот ключ требуется в пользовательской схеме URL.

Примечание. osx не запускает ваше приложение, если вы установите его на None.

Вы можете получить информацию отсюда Apple Developer Document

licensed under cc by-sa 3.0 with attribution.