为了能够测试GameKit功能,我希望能够检测代码是否在Playground中运行,以便它可以跳过网络调用。有没有办法做到这一点?
修改
忘记GameKit - 这只会让问题变得混乱。有许多不同的场景,这将是有用的。关于特定函数调用是否存在,这只是一个简单的问题:如果代码在Playground中运行,是否有一个返回true
的方法?
答案 0 :(得分:4)
我不知道有记录的方法,但你可以做一些无证件的事情。
这是一种在Mac OS和iOS游戏机中同时适用于Swift 2.2的Xcode 7和Swift 3.0的Xcode 8的技术:检查标识符以"com.apple.dt"
开头的包。
// Swift 2.2
if NSBundle.allBundles().contains({ ($0.bundleIdentifier ?? "").hasPrefix("com.apple.dt.") }) {
print("in playground")
} else {
print("not in playground")
}
// Swift 3.0
if Bundle.allBundles.contains(where: { ($0.bundleIdentifier ?? "").hasPrefix("com.apple.dt.") }) {
print("in playground")
} else {
print("not in playground")
}
请注意,com.apple.dt.
不是专门为与游乐场相关的捆绑保留的前缀;像“开发人员工具”这样的dt
部分标准。因此,在某些情况下,您可能会出现误报:有一个匹配的捆绑但您不在操场上。我不知道任何这种情况,但可能有一些。我在Xcode 7下测试了macOS xib中的IBDesignable
视图,并且没有加载任何com.apple.dt.
个包。