iOS应用程序的多个Bundle标识符的URL类型

3
我希望我的iOS项目能够处理多个URL类型和多个包标识符,这样我就可以在同一设备上安装两个版本的应用程序。
我有两个不同的包标识符:com.mycompany.myapp 和 com.mycompany.myapp-test
我在Info.plist文件中为两个包标识符注册了2个URL类型。

enter image description here

我使用两个包标识符生成了2个构建,并将两个应用程序安装在同一设备上。然后,我尝试使用2个URL访问我的应用程序:myapp://feed和myapp-test://feed。
但是由于某种原因,我无法打开myapp-test,当我单击这两个链接时它总是打开myapp。
显然,我处理方式有些问题,所以我想知道如何在同一个Xcode项目中管理多个包标识符和多个URL方案?
谢谢。

1
你解决过这个问题吗?我也遇到了完全相同的情况。 - Bryan Deemer
1
你不能在同一个bundle中构建所有的URL类型,否则它将为所有类型打开。每个bundle的模式应该是不同的,例如变量像$(PRODUCT_BUNDLE_IDENTIFIER)。尽管在我的测试中它没有起作用,但我仍在努力尝试。 - bitsmanent
4个回答

4

经过一些调查,找到了几种解决方案。

自动化

使用$(PRODUCT_BUNDLE_IDENTIFIER)作为标识符和方案,然后使用URL打开每个应用程序,例如com.mycompany.myapp://。这将始终有效,不管您有多少目标、方案或构建设置。

半自动化

设置用户定义的变量。您需要将这些变量放在您的info.plist文件中才能引用它们。这种方法更加灵活,但是您必须手动编写方案名称(仅一次)。实际上,这是我在我的应用程序中选择的方式。

手动

这更像是一个解决方法,而不是一个正确的解决方案,但在所有情况下都可以100%地工作:在构建每个包之前设置标识符和方案。

例如,如果您有标识符/方案对,如com.mycompany.myapp/myappcom.mycompany.myapp-test/myapp-test,则执行以下操作:

  1. 设置标识符com.mycompany.myapp和方案myapp,然后构建应用程序包myapp
  2. 设置标识符com.mycompany.myapp-test和方案myapp-test,然后构建应用程序包myapp-test

这样,您应该能够调用相对方案打开每个包。尽管在每次构建之前都需要更改URL类型。就我个人而言,我永远不会这样做。


2

请确保:

1)对于包ID为com.mycompany.myapp的应用程序,您注册了myapp模式,并且没有注册myapp-test模式;

同时,

2)对于包ID为com.mycompany.myapp-test的应用程序,您注册了myapp-test模式,并且没有注册myapp模式。

如果我正确理解了问题,这种行为的原因是两个应用程序都注册了这两个模式。当您尝试打开某些URL(myapp-test://...或myapp://...),iOS检测到有多个应用程序已注册并选择第一个来处理它。

不需要注册您打算打开的模式-您需要注册要处理的模式。

希望这可以帮助您。


1
我有同样的问题。根据Igor B的答案,我已经仔细检查了任何重复的模式,但无论我做什么,我的测试小部件仍然试图在主应用程序中打开链接,而不是测试应用程序。还有其他想法吗? - Bryan Deemer

1

在 Xcode 12 中,根据 @clamiax 的建议,我做了以下操作:

目标 -> 您的应用程序 -> 构建设置 -> + -> 添加用户定义设置 ->

设置:URL_SCHEME

值:yourapp-debugyourappyourapp-test 等不同方案的值。

目标 -> 您的应用程序 -> 信息 -> URL 类型

URL 方案:$(URL_SCHEME)

define value use value


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接