Cra*_*ake 5 url objective-c url-scheme ios swift
我的iOS应用程序有50多个目标,每个目标都有自己的自定义URL方案.我需要检测来自webview的请求是否与当前正在运行的应用程序的方案匹配.为此,我需要能够从代码中查询当前应用程序的URL方案.
类似的问题涉及试图询问其他应用程序以发现其URL方案,这似乎是不可能的.我需要在我的应用程序中找到我自己的应用程序的方案.
我想避免为URL方案设置另一个plist值,并将其包含在目标中.
有没有办法获得当前应用程序的URL方案?
这是我想出来实现这一目标的功能.
- (BOOL)doesMatchURLScheme:(NSString *)scheme {
if([[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleURLTypes"]) {
NSArray *urlTypes = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleURLTypes"];
for(NSDictionary *urlType in urlTypes)
{
if(urlType[@"CFBundleURLSchemes"])
{
NSArray *urlSchemes = urlType[@"CFBundleURLSchemes"];
for(NSString *urlScheme in urlSchemes)
if([urlScheme caseInsensitiveCompare:scheme] == NSOrderedSame)
return YES;
}
}
}
return NO;
}
Run Code Online (Sandbox Code Playgroud)
在 Swift 4 中:以编程方式从 Info.plist 获取自定义 url 方案的工作版本
func externalURLScheme() -> String? {
guard let urlTypes = Bundle.main.infoDictionary?["CFBundleURLTypes"] as? [AnyObject],
let urlTypeDictionary = urlTypes.first as? [String: AnyObject],
let urlSchemes = urlTypeDictionary["CFBundleURLSchemes"] as? [AnyObject],
let externalURLScheme = urlSchemes.first as? String else { return nil }
return externalURLScheme
}
Run Code Online (Sandbox Code Playgroud)
(假设 urlTypes 和 urlSchemes 数组中只有 1 个元素,因此取第一个元素)。这是我的 URL Scheme 的 plist 条目
| 归档时间: |
|
| 查看次数: |
3081 次 |
| 最近记录: |