如果我希望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:“urls。但是,如果我将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:“urls。
你知道为什么吗?
我没有看到任何苹果文档要求CFBundleIdentifier必须与CFBundleURLName相匹配,但在实践中似乎是这样的。还是我错过了什么?
谢谢!
发布于 2013-01-31 21:37:23
不,这两个属性不需要匹配,我不像您那样有问题,我将我的应用程序标识符CFBundleIdentifier设置为com.djp.myapp,并将url方案设置为CFBundleURLName设置为nothing.like.the.identifier,将CFBundleURLSchemes设置为。
我可以通过以下方式打开这个应用程序:abcd://
我认为可能会给你带来问题的一件事是,如果你运行你的应用程序时设置了url方案,并且在测试期间更改了捆绑包标识符(CFBundleIdentifier),从而实际上导致系统中存在两个应用程序。在这种情况下,你会有一个url方案冲突和苹果声明,没有任何程序来决定哪个应用程序将优先。
备注:如果超过一个第三方应用程序注册来处理相同的URL方案,目前还没有确定哪个应用程序将被给予该方案的过程。
此外,据我测试和经验,如果你有两个冲突的应用程序,它似乎是第一个安装的应用程序,当这个应用程序被删除时,第二个应用程序现在是唯一支持特定url方案的应用程序仍然没有使用。
这表明url方案在安装时已在系统中注册,需要重新安装此应用程序才能使其在这些方案上正常工作。
有关网址方案的更多信息,请查看Apple Advances App Tricks文档。
发布于 2013-04-09 22:43:32
我认为原因是你没有特殊的CFBundleTypeRole键,它表明你的应用程序是一个查看器,编辑器,外壳或其他。在自定义URL方案中需要此密钥。
注意:当您将osx设置为None时,它将不会启动您的应用程序。
你可以从这里获取信息Apple Developer Document
https://stackoverflow.com/questions/13040175
复制相似问题