我正在制作处理敏感信用卡数据的应用程序.
如果我的代码在调试模式下运行,我想将此数据记录到控制台并进行一些文件转储.
但是在最终的appstore版本上(即它在发布模式下运行时)必须禁用所有这些(安全隐患)!
我会尽力回答我的问题; 所以问题就变成了"这个解决方案路径是正确的还是最好的方式?"
// add `IS_DEBUG=1` to your debug build preprocessor settings
#if( IS_DEBUG )
#define MYLog(args...) NSLog(args)
#else
#define MYLog(args...)
#endif
Run Code Online (Sandbox Code Playgroud) 在快速之前,我将为alpha,beta和分发版本定义一组方案.这些方案中的每一个都有一组宏,这些宏被定义为在项目级别处理某些行为.最简单的示例是DEBUG = 1宏,默认情况下为Run构建的默认方案中的所有Xcode项目定义.人们可以查询#ifdef DEBUG ...并相应地在代码中做出决定,甚至编译出非必要的代码.
看起来这种类型的配置选通并不像使用swift那么容易,因为不支持宏.有人可以建议一个类似的方法,我不在乎代码是否编译出来,本身.不过,我想基于构建方案来构建功能.
是否有可能在运行时检测到已通过TestFlight Beta(通过iTunes Connect提交)与App Store安装了应用程序?您可以提交单个应用包,并通过它们提供.是否有可以检测安装方式的API?或收据是否包含允许确定此信息的信息?
在XCode 6.1中运行测试时,一个令人讨厌的事情是整个应用程序必须运行并启动其storyboard和root viewController.在我的应用程序中,它运行一些获取API数据的服务器调用.但是,我不希望应用程序在运行其测试时执行此操作.
随着预处理器宏的消失,对于我的项目来说最好的是要知道它是在运行测试而不是普通的启动时启动的吗?我用CMD + U和机器人正常运行它们.
伪代码将是:
// Appdelegate.swift
if runningTests() {
return
} else {
// do ordinary api calls
}
Run Code Online (Sandbox Code Playgroud) 所以这个答案我是否需要在发布应用程序之前禁用NSLog?提供了一种在生产环境中禁用NSLog的好方法,但不幸的是,这个解决方案似乎不适用于Swift项目.我的方法是将以下代码放在我用于项目中某些pod的桥接头.h文件中.
#ifdef DEBUG
#define DLog(...) NSLog(@"%s %@", __PRETTY_FUNCTION__, [NSString stringWithFormat:__VA_ARGS__])
#else
#define DLog(...) do { } while (0)
#endif
Run Code Online (Sandbox Code Playgroud)
但是,在Swift代码中使用DLog会导致编译器声明它们是未经过识别的符号.是否有其他地方我应该放置这个#ifdef或者一般的Swift项目是否有不同的解决方案?
如何在Swift条件编译语句中检查iOS部署目标?
我尝试过以下方法:
#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_8_0
// some code here
#else
// other code here
#endif
Run Code Online (Sandbox Code Playgroud)
但是,第一个表达式导致编译错误:
Expected '&&' or '||' expression
Run Code Online (Sandbox Code Playgroud) conditional-compilation buildconfiguration deployment-target ios swift
正如你们中的一些人在完全调试模式下运行时可能意识到的那样,swift可能非常慢.有没有办法可以在代码或GUI中打印出一条消息,让我知道我是否忘了正确地编译它.我正在以混合模式运行,所以如果有人能给我Objc和Swift代码那将是非常棒的.
谢谢!
我正在构建一个 iOS 框架,我需要在公共应用程序和一些内部应用程序中使用相同的框架,不同之处在于,在内部应用程序中我需要访问一些我想对公共应用程序隐藏的类和函数,我不想将粘贴代码从框架复制到内部应用程序......
是否可以使用条件编译(或其他一些无需重复代码的解决方案)来执行以下操作:
#if SOMEFLAG
public
#else
internal
#endif
class SomeClass{
// public when SOMEFLAG otherwise internal
}
Run Code Online (Sandbox Code Playgroud)
当然,上面的代码不起作用,所以它是我需要的伪代码(它不必与宏一起使用)。
谢谢。
我有一个与我的框架捆绑在一起的Swift演示项目.我想确保演示中的Swift代码与Xcode 6(Swift 1.2)和Xcode 7(Swift 2.0)成功编译,无需用户干预.
由于Swift中只有边缘预处理器支持,如何在编译时确定使用哪个版本的Swift或Xcode来编译代码?
现在,这是重要的细节:
没有构建设置或其他需要用户以某种方式指定她正在使用的Swift/Xcode版本的方法.
我一直在想:这是一项微不足道的任务,用Swift怎么可能不可能?
作为一个框架开发人员,这让我感到疯狂,因为Swift项目的成功编译现在完全取决于用户的Xcode版本,我不能要求他们全部"更新到Xcode 6.4",稍后不得不问他们一遍又一遍地"更新到Xcode 7.1".疯了吧!
另一种选择当然是拥有单独的演示项目,管理不同的代码库,每个版本的Swift都有一个.并希望用户知道哪个项目适用于她的Xcode版本.不是一个真正的选择.
遗憾的是,另一种替代方案,即根本不使用任何Swift 2.0的增强功能.有一些语法,类和方法在一个或另一个Swift版本中不起作用,只是因为编译器在较新的Xcode版本中更加挑剔.
ios ×7
swift ×7
xcode ×4
preprocessor ×2
compilation ×1
debugging ×1
iphone ×1
objective-c ×1
release ×1
swift2 ×1
testflight ×1
xctest ×1