Так как я хочу поддерживать iOS 8, я изменил функцию application(_:open:options:)
в ответа Уитни Фостера на
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
let appId = SDKSettings.appId
if url.scheme != nil && url.scheme!.hasPrefix("fb\(appId)") && url.host == "authorize" { // facebook
if #available(iOS 9.0, *) {
return SDKApplicationDelegate.shared.application(app, open: url, options: options)
}
}
return false
}
и реализовал дополнительную резервную функцию
// Fallback on earlier versions
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
return SDKApplicationDelegate.shared.application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
}
Разработка далее на этом. Текущий рабочий каталог и каталог запуска могут отличаться! Возьмите этот пример, приложение запускается из корневого каталога (~
).
Library/Developer/Xcode/DerivedData/MyApp-ehwczslxjxsxiob/Build/Products/Debug/MyApp.app/Contents/MacOS/MyApp -param value
NSString *p1 = [[NSFileManager defaultManager] currentDirectoryPath];
// p1 = ~/Library/Containers/com.MyApp.beta/Data
NSString *p2 = [[NSProcessInfo processInfo] environment][@"PWD"];
// p2 = ~
В зависимости от ситуации, которую Вы могли бы хотеть один или другой. В моем случае я хочу обеспечить CLI, который берет параметры пути, которые могут быть относительно текущего рабочего каталога в оболочке.