以编程方式从 Today 扩展中的 plist 获取 URL 方案

问题描述 投票:0回答:4

最终我尝试通过以下方式从小部件启动主应用程序

UIApplication.SharedApplication.OpenUrl(new NSUrl("MyURLScheme//"));

所以我有一个带有 Today 扩展的 iOS 应用程序。我想访问我的主应用程序的 URL 方案。那可能吗?我的 URL 方案位于主应用程序的 Plist 文件内,而不是我的 Today 扩展。我可以只引用主应用程序中的那个吗?我尝试从 CFBundleURLTypes 和 CFBundleURLSchemes 获取它,但它们都显示为“null”。 可能是因为它正在查找小部件的 Plist,而不是主应用程序的 Plist。

var asdf2 = NSBundle.MainBundle.InfoDictionary["CFBundleURLTypes"];
var asdf3 = NSBundle.MainBundle.InfoDictionary["CFBundleURLSchemes"];

这是主应用程序 Plist 文件中 URL 方案所在位置的屏幕截图。我不想在今天的扩展的 Plist 文件中存储重复的信息。而且我也不想将 URL 方案硬编码到今天的扩展代码中。

ios xamarin.ios info.plist today-extension
4个回答
3
投票

您可以参考以下网址 堆栈溢出

extension Bundle {

 static let externalURLSchemes: [String] = {
    guard let urlTypes = main.infoDictionary?["CFBundleURLTypes"] as? [[String: Any]] else {
        return []
    }

    var result: [String] = []
    for urlTypeDictionary in urlTypes {
        guard let urlSchemes = urlTypeDictionary["CFBundleURLSchemes"] as? [String] else { continue }
        guard let externalURLScheme = urlSchemes.first else { continue }
        result.append(externalURLScheme)
    }

    return result
 }()

}

1
投票

会是这样的(丑陋的):

var arr = (NSBundle.MainBundle.InfoDictionary["CFBundleURLTypes"] as NSMutableArray);
var urlTypes = arr.GetItem<NSDictionary>(0);
var schemes = urlTypes.ObjectForKey(new NSString("CFBundleURLSchemes")) as NSMutableArray;
var scheme = schemes.GetItem<NSString>(0).ToString();

0
投票

您可能需要为您的应用程序和扩展程序创建一个

App Group
,这将允许您将要在两者之间共享的 plist 或任何其他文件放入磁盘上的共享位置。

这里有一篇文章解释了这是如何完成的: https://learn.microsoft.com/en-us/xamarin/ios/app-fundamentals/file-system#configure-an-app-group


0
投票
extension Bundle {
    static let externalURLSchemes: [String] = {
        guard let urlTypes = main.infoDictionary?["CFBundleURLTypes"] as? [[String: Any]],
              let urlSchemesDictionary = urlTypes.first(where: { $0["CFBundleURLSchemes"] != nil }),
              let urlSchemes = urlSchemesDictionary["CFBundleURLSchemes"] as? [String]
        else {
            return []
        }
        return urlSchemes
    }()
}
© www.soinside.com 2019 - 2024. All rights reserved.