在Cocoa应用程序中,我想使用条件编译,如:
#if MACOSX_DEPLOYMENT_TARGET <= MAC_OS_X_VERSION_10_4
[[NSFileManager defaultManager] removeFileAtPath:path handler:nil];
#else
[[NSFileManager defaultManager] removeItemAtPath:path error:NULL];
#endif
Run Code Online (Sandbox Code Playgroud)
我的希望是,这将避免对removeFileAtPath编译器警告:当MACOSX_DEPLOYMENT_TARGET = 10.6,因为它不应该编译该行被弃用.
它不起作用.
当MACOSX_DEPLOYMENT_TARGET = 10.6时,我收到一条警告,表示不推荐使用removeFileAtPath:.但它不应该编译那一行,所以它不应该警告它有一个弃用的方法!
(我在项目构建设置和目标构建设置中都设置了MACOSX_DEPLOYMENT_TARGET.我将BASE_SDK设置为10.6,并在两者中指定GCC 4.2.)
我究竟做错了什么?我必须条件编译的一些基本的误解?
我想从已使用codesign签名的Mac应用中删除数字签名.有一个未记录的选项来编码, - 删除签名,它的名字似乎就是我所需要的.但是,我无法让它发挥作用.我意识到它没有记录,但我真的可以使用这个功能.也许我做错了什么?
codesign -s MyIdentity foo.app
Run Code Online (Sandbox Code Playgroud)
正常工作,签署应用程序
codesign --remove-signature foo.app
Run Code Online (Sandbox Code Playgroud)
然后说磁盘活动几秒钟
foo.app: invalid format for signature
Run Code Online (Sandbox Code Playgroud)
和foo.app已经增长到1.9 GB!(具体来说,它是foo.app/Contents/Resources/MacOS中的可执行文件,从1.1 MB增加到1.9 GB.)
当我尝试签名/取消签名二进制支持工具而不是.app时,会发生同样的事情.
有任何想法吗?
背景:这是我自己的应用程序; 我不打算打败版权保护或类似的东西.
我想分发一个已签名的应用程序,以便每次更新应用程序都不需要用户批准来读取/写入应用程序在钥匙串中的条目.但是,有些人需要通过将自己的文件夹添加到/ Resources来修改应用程序.如果他们这样做,签名将变为无效,并且应用程序无法使用自己的Keychain条目.
该应用程序可以轻松检测是否发生了这种情况.如果应用程序可以删除它的签名,一切都会好的.那些进行此修改的人需要给修改后的,现在未签名的应用程序许可才能使用Keychain,但这对我来说没问题.