我向Apple提交了一个没有任何源代码的二进制文件.
除了手动检查源代码外,Apple如何知道使用了什么以及您调用了哪些API?
既然Apple正在运行某种静态分析来自动检查私有API的使用,那么很多人都因为Three20库而被捕.我使用另一个第三方库(我自己从代码中编译),我想在提交给Apple之前自动审核它以供私有API使用,所以我可以删除/重写这些部分.
如果我运行nm我的应用程序可执行文件,我会得到一个符号列表,我看到那些我不使用的符号.例如,我看到_AudioServicesPlaySystemSound,如果我在XCode中搜索"AudioServicesPlaySystemSound",我得不到任何结果.有没有办法自动区分对私有API的调用,例如我注意到Apple习惯用初始下划线命名它们.
但是:如果我故意包含对私有API的调用,它不会显示在输出中nm,但如果我strings在二进制文件上运行它会显示.基于此,我的一个想法是将所有私有API调用的大量列表编译成一个巨大的表,并在字符串输出中自动搜索它们.我还没有这样做.
有没有人有关于如何自动捕捉这些东西的任何提示,所以我只进行一次审查过程?
我正在使用一些CoreImage过滤器来处理图像.将滤镜应用于输入图像会生成名为filterOutputImage的输出图像,类型为CIImage.
我现在希望显示该图像,并尝试:
self.modifiedPhoto = [UIImage imageWithCIImage:filterOutputImage];
self.photoImageView.image = self.modifiedPhoto;
Run Code Online (Sandbox Code Playgroud)
但是视图是空白的 - 没有显示任何内容.
如果我添加了打印出有关filterOutputImage和self.modifiedPhoto的详细信息的日志语句,那些日志语句会向我显示这些变量似乎都包含合法的图像数据:它们的大小正在报告且对象不是nil.
所以在做了一些谷歌搜索之后,我找到了一个需要通过CGImage阶段的解决方案; 可见:
CGImageRef outputImageRef = [context createCGImage:filterOutputImage fromRect:[filterOutputImage extent]];
self.modifiedPhoto = [UIImage imageWithCGImage:outputImageRef scale:self.originalPhoto.scale orientation:self.originalPhoto.imageOrientation];
self.photoImageView.image = self.modifiedPhoto;
CGImageRelease(outputImageRef);
Run Code Online (Sandbox Code Playgroud)
第二种方法有效:我在视图中显示正确的图像.
有人可以向我解释为什么我的第一次尝试失败了吗?我使用imageWithCIImage方法做错了什么导致图像看起来存在但无法显示?是否总是需要"通过"CGImage阶段才能从CIImage生成UIImage?
希望有人能解决我的困惑:)
H.