在过去的几个小时里,我一直在研究SNRLastFMEngine,这使得iOS友好,但已经停滞不前了。我的问题是在一个单独的函数中似乎只使用Mac OS的cocoa应用程序中提供的函数。
功能如下:
- (void)_registerCustomURLSchemeHandler
{
// Register for Apple Events
NSAppleEventManager *em = [NSAppleEventManager sharedAppleEventManager];
[em setEventHandler:self andSelector:@selector(getURL:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL];
// Set Sonora as the default handler
NSString *bundleID = [[NSBundle mainBundle] bundleIdentifier];
LSSetDefaultHandlerForURLScheme((CFStringRef)kCustomURLScheme, (CFStringRef)bundleID);
}
其中kCustomURLScheme
是预先定义的NSString
然后由函数- (void)getURL:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent
我考虑过添加NSNotification
观察者来处理事件,但没有运气(它不识别事件类或事件ID,我不知道该怎么做占LSSetDefaultHandlerForURLScheme
)。我对Mac OS应用程序没有任何经验,我确信我错过了更大的图景。我非常感谢任何有这两种语言知识的人的帮助/指导。
答案 0 :(得分:4)
在iOS中,您无法在运行时动态地向系统注册URL方案。
您告诉iOS您的应用可以通过使用CFBundleURLTypes属性将其列在Info.plist文件中来处理URL方案。 (可能在文件的Xcode显示中显示为“URL类型”)。
这意味着您在发布应用时预先声明了支持的方案列表,除非您提交较新版本的应用,否则无法更改。尝试更改Info.plist文件将无法正常工作,因为它会破坏文件的签名,iOS将拒绝运行它。