在我的iphone应用程序(iOS7)提交过程中,我看到了屏幕上显示的错误。基本上,它说我使用非公共符号__strlcat_chk,strlcpy_chk,我知道strlcat和strlcpy,但不认为它可能是非公开的。 我使用了Xcode 5。
我也在我的项目中快速搜索strlcat()和strlcpy(),我没有看到我使用它。
任何想法可能是什么原因。
[更新]我通过我的开发者帐户提交了我的机票之后,我实际上得到了Apple的更新(我们都有2个技术支持来自开发者帐户。)基本上,Apple Support告诉我这是已知的问题。告诉苹果您的应用名称和身份证号码,您的应用将被列入白名单。 Apple发出Go信号后,通过提交验证流程没有问题。
答案 0 :(得分:4)
可以在文件中找到原因:
iOS 7.0 / usr / include / secure / _string.h
导致问题的代码如下:
#if __has_builtin(__builtin___strlcat_chk) && __HAS_FIXED_CHK_PROTOTYPES
#undef strlcat
#define strlcat(dest, src, len) \
__builtin___strlcat_chk (dest, src, len, __darwin_obsz (dest))
#endif
#endif /* __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 || __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 /
#endif / __DARWIN_C_LEVEL >= __DARWIN_C_FULL */
我不确定这是做什么的,但我猜这是在验证代码时被问到的问题。
你可以将它与同一个_string.h文件的iOS 6版本进行比较,你会发现没有对两种方法strlcat和strlcpy的引用。
还有一个关于rdar参考的评论:
rdar://问题/ 12622659
结论:这似乎是iOS 7.0 SDK的一个问题,Apple可以“修复”它。
<强>更新强>
如果您确实想要提交应用,只需编辑_string.h文件,将#define __HAS_FIXED_CHK_PROTOTYPES 1
修改为#define __HAS_FIXED_CHK_PROTOTYPES 0
答案 1 :(得分:2)
我使用OpenSSL的自编译版本遇到了这个问题。我针对iOS 6.1 SDK重新编译了OpenSSL,将libssl.a和libcrypto.a添加到我的项目中,然后针对SDK 7.0构建/存档了我的应用程序,现在它已通过验证。
所以它似乎是iOS 7.0 SDK的一个问题,但是如果你仍然可以访问6.1 SDK,那么这种解决方法应该可行。