Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios CbundleUrlName必须与CbundleIdentifier匹配吗?_Ios_Iphone_Ipad - Fatal编程技术网

Ios CbundleUrlName必须与CbundleIdentifier匹配吗?

Ios CbundleUrlName必须与CbundleIdentifier匹配吗?,ios,iphone,ipad,Ios,Iphone,Ipad,如果我希望iOS应用程序App1在设备上启动App2,那么CFBundleURLName是否需要与Info.plist中CFBundleURLTypes中的CFBundleIdentifier匹配 例如,如果我在App1中有 <key>CFBundleIdentifier</key> <string>com.foo.App1</string> ... <key>CFBundleURLTypes</key> <array

如果我希望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>
CbundleIdentifier
com.foo.App1
...
CbundleurlTypes
CbundleurlTypes
循环流化床锅炉方案
食物计划
CFBundleURLName
com.foo.App1
在上述情况下,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>
CbundleUrlTypes
循环流化床锅炉方案
食物计划
CFBundleURLName
com.foo.xyz
i、 例如,一个CFBundleURLName!=CbundleIdentifier,则App2无法再启动App1中的“fooscheme:”URL

你知道为什么吗

我没有看到CbundleIdentifier必须与CbundleUrlName匹配的任何苹果文档,但实际上似乎是这样。还是我遗漏了什么


谢谢

不,这两个属性不需要匹配,我没有像您一样对此有问题,我将我的应用程序标识符-
CbundleIdentifier
设置为com.djp.myapp,并将使用
CbundleUrlName
设置的url方案设置为nothing.like.identifier
CbundleUrlSchemes
设置为abcd

我可以通过呼叫打开此应用程序:
abcd://

我认为可能会给您带来问题的一件事是,如果您在运行应用程序时设置了url方案,并且在测试期间更改了捆绑包标识符(
CbundleIdentifier
),从而实际导致系统中存在两个应用程序。 在这种情况下,您可能会遇到url方案冲突,苹果表示没有任何流程来确定哪个应用程序将优先

注意:如果有多个第三方应用程序注册以处理同一问题 URL方案,目前没有确定哪个应用程序的过程 将获得该计划

另外,根据我的测试和经验,如果你有两个相互冲突的应用程序,它似乎是第一个安装使用的应用程序,当这个应用程序被删除时,第二个应用程序(现在是唯一支持特定url方案的应用程序)仍然没有使用

这表明url方案在安装时已在系统中注册,需要重新安装此应用程序才能按预期在这些方案上运行


有关URL方案的更多信息,请查看该文档。

我认为原因是您没有指定CbundleTypeRole键,该键指示您的应用程序是查看器、编辑器、shell或其他应用程序。 自定义URL方案中需要此密钥

注意:当您将应用程序设置为“无”时,osx将不会启动该应用程序

你可以从这里得到信息