我正在我的应用程序中实现通用深度链接。当我注册不同的域时,它会创建一个AppName.entitlements文件我想像plist一样读取这个文件的值。我尽力了
if let path = NSBundle.mainBundle().pathForResource("AppName", ofType: "entitlements") { }
但它返回nil是否可以读取这些文件?
nil
svgewumm1#
该文件不会复制到您的应用中(请参阅Xcode的目标复选框)。它只用于建筑授权是Xcode的配置文件所以:否
注意,即使您手动将其添加到bundle中,它也会产生类似于以下内容的警告:Warning: The Copy Bundle Resources build phase contains this target's Info.plist file
解决方法为警告,如:https://stackoverflow.com/a/56044915/8740349
b4lqfgs42#
我找到的解决方案:将appGroup添加到Info.Plist文件中
appGroup
Info.Plist
<key>appGroup</key> <string>group.com.acronis.mobile.ios.development</string>
要读取字符串,请使用以下代码:
extension String { // MARK: - Static static var appGroup: String = { guard let bundleAppGroup = Bundle.main.infoDictionary?["appGroup"] as? String else { fatalError("The application must contain appGroup in Info.plist file") } return bundleAppGroup }() }
如果需要,在构建之前使用自定义脚本更改entitlements和Info.plist。
entitlements
Info.plist
zzzyeukh3#
我深入研究了一下这个问题,实际上很简单。您可以使用一个run脚本来获取授权并将其合并到Info.plist中:
ENTITLEMENTS= # Path to Project.entitlements # INFOPLIST= # Path to Info.plist # echo "Writing entitlements to Info.plist"; KEY="entitlements-from-script"; /usr/libexec/PlistBuddy -c "delete $KEY" "$INFOPLIST"; /usr/libexec/PlistBuddy -c "add $KEY dict" "$INFOPLIST"; /usr/libexec/PlistBuddy -c "merge $ENTITLEMENTS $KEY" "$INFOPLIST";
现在你可以在代码中使用它:
let entitlements = Bundle.main.infoDictionary?["entitlements-from-script"]
ppcbkaq54#
在研究这个问题时,我发现了下面的博客文章https://medium.com/swlh/reading-application-entitlements-with-swift-65cff184e840,其中@mateuszmatrejek解释了如何在运行时解析二进制文件以提取权利。这种方法是非常低级和复杂的。我看到这种方法的主要优点是,如果你正在处理一个框架或库,这将有助于读取正在使用导入你的库或框架的应用程序的权限。
4条答案
按热度按时间svgewumm1#
该文件不会复制到您的应用中(请参阅Xcode的目标复选框)。它只用于建筑
授权是Xcode的配置文件
所以:否
注意,即使您手动将其添加到bundle中,它也会产生类似于以下内容的警告:Warning: The Copy Bundle Resources build phase contains this target's Info.plist file
解决方法为警告,如:https://stackoverflow.com/a/56044915/8740349
b4lqfgs42#
我找到的解决方案:
将
appGroup
添加到Info.Plist
文件中要读取字符串,请使用以下代码:
如果需要,在构建之前使用自定义脚本更改
entitlements
和Info.plist
。zzzyeukh3#
我深入研究了一下这个问题,实际上很简单。
您可以使用一个run脚本来获取授权并将其合并到Info.plist中:
现在你可以在代码中使用它:
ppcbkaq54#
在研究这个问题时,我发现了下面的博客文章https://medium.com/swlh/reading-application-entitlements-with-swift-65cff184e840,其中@mateuszmatrejek解释了如何在运行时解析二进制文件以提取权利。
这种方法是非常低级和复杂的。我看到这种方法的主要优点是,如果你正在处理一个框架或库,这将有助于读取正在使用导入你的库或框架的应用程序的权限。