我的工作区中有以下项目:
CommonSecurity(取决于Common)Data(依赖于Common,Security(和CoreData))Api(依赖于Common,Security,Data)MyApp(依赖于Common,Security,Data,Api)除了MyAppCocoa Touch Frameworks 之外的所有项目,主要是用Swift编写的.
从Xcode 6.3.1开始,我无法编译,因为我在构建"Api"框架时收到以下消息:
<unknown>:0: error: timed out waiting to acquire lock file for module 'Data'
~/Developer/myapp/src/Api/Api/SomeClass.swift:4:8: error: cannot load underlying module for 'Data'
import Data
^
Run Code Online (Sandbox Code Playgroud) 我想在Xcode中编写一个用于登录的UI测试FBDSKLoginKit.
然而,Facebook iOS SDK使用SFSafariViewController呈现给用户以便对她进行身份验证,遗憾的是,在Xcode 7中无法与SFSafariViewControllerUI测试进行交互.
任何想法如何测试Facebook登录而不与之交互SFSafariViewController?
我在我的应用程序中使用Crashlytics崩溃和非致命错误报告已有一段时间了.我正在使用日志增强这两个报告,如下所述:https://docs.fabric.io/apple/crashlytics/enhanced-reports.html#custom-logging-in-swift
我最近注意到的是,如果我尝试在其中记录带换行符的消息,则换行符后面的所有文本都将被SDK删除,因此只有第一行在Crashlytics上可见.据我所知,过去这种方式不起作用.整个消息是可见的,并使用换行符正确格式化.
例:
let logMsg = "This is a multiline \n message \n Hope all lines are visible in Crashlytics."
CLSLogv("%@", getVaList([logMsg]))
Run Code Online (Sandbox Code Playgroud)
在Crashlytics中,只会记录此部分:
1 | 13:13:00:928 (UTC) | This is a multiline
这是一个错误吗?我可以阻止Crashlytics SDK执行此操作吗?现在,我错过了日志的一些重要部分.
iOS 13 为我们带来了UIUserInterfaceLevel,可以是.base或.elevated。UIView当在黑暗模式下使用升高的级别时,系统似乎会自动调整提供的颜色。
但是,似乎没有办法在资产目录中手动指定.elevated颜色,是吗?
唯一的方法似乎是通过新的 UIColor 构造函数:
UIColor.init { (traits) -> UIColor in
traits.userInterfaceLevel == .elevated ? UIColor(named: "myColor-elevated")! : UIColor(named: "myColor")!
}
Run Code Online (Sandbox Code Playgroud) 在Xcode 6.3中构建应用程序会在步骤中卡住几分钟(大约10分钟)Merge MyApp.swiftmodule:
MergeSwiftModule normal x86_64 /Users/.../Library/Developer/Xcode/DerivedData/MyApp-crbdsfrhkvpiynaffvhzzsspiels/Build/Intermediates/MyApp.build/Debug-iphonesimulator/MyApp.build/Objects-normal/x86_64/MyApp.swiftmodule
Run Code Online (Sandbox Code Playgroud)
这在以前版本的Xcode 6.2和Swift 1.0中不是问题.
在某些情况下,错误作为参数提供而不是抛出。一个示例可以是所Result<T, Error>提供的完成处理程序。我想匹配错误而不抛出它。
通过抛出错误匹配的示例:
enum MyError: Error {
case error
}
func process(error: Error) {
do {
throw error
} catch MyError.error {
print("this is it")
} catch {
print("unknown error")
}
}
process(error: MyError.error)
Run Code Online (Sandbox Code Playgroud)
更新:
即使对于系统提供的错误(例如URLError不是enum类型的错误),匹配也应该有效。
func process(error: Error) {
do {
throw error
} catch URLError.timedOut {
print("this is not it")
} catch URLError.cancelled {
print("this is it")
} catch {
print("unknown error")
}
}
process(error: URLError(.cancelled))
Run Code Online (Sandbox Code Playgroud)