我们基于qtwebkit的应用程序在提交到mac app store后被苹果拒绝。拒绝的原因之一是使用非公共API。我已经在qtwebkit的源代码中找到了其中的六个。但我无处可寻。我搜索了我们的应用程序的源代码和QT的完整源代码。
我在qtwebkit源代码中找到的六个非公开api是:
CFHTTPCookieStorageSetCookieAcceptPolicy
CFURLCacheCopyResponseForRequest
CFURLResponseGetMIMEType
CFURLResponseCopySuggestedFilename
CFURLCacheSetMemoryCapacity
CFURLCacheSetDiskCapacity
以下是apple发现的违规行为的完整列表:
使用非公共API可能会导致用户体验不佳 这些API将来会发生变化,因此不允许这样做。该 以下非公共API包含在您的应用程序中:
NSAccessibilityCreateAXUIElementRef NSAccessibilityHandleFocusChanged NSAccessibilityUnregisterUniqueIdForUIElement NSAppKitPropertyCreator NSCarbonWindowPropertyTag NSMouseMovedNotification _NSDrawCarbonThemeBezel _NSDrawCarbonThemeListBox _NSPopUpCarbonMenu3 _NXShowKeyAndMain来自框架:'/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit'
AXTextMarkerCreate AXTextMarkerGetBytePtr AXTextMarkerGetLength AXTextMarkerGetTypeID AXTextMarkerRangeCopyEndMarker AXTextMarkerRangeCopyStartMarker AXTextMarkerRangeCreate AXTextMarkerRangeGetTypeID CTLineCreateWithUniCharProvider 来自框架的CoreDragGetCurrentDrag CoreDragSetImage: '/System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices'
GetNativeWindowFromWindowRef来自TSMGetInputSourceProperty 框架: '/System/Library/Frameworks/Carbon.framework/Versions/A/Carbon'
CFReadStreamSignalEvent _CFAppVersionCheckLessThan 来自框架的_CFBundleSetDefaultLocalization _CFStringGetUserDefaultEncoding: '/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation'
CFHTTPCookieStorageCopyCookiesForURL CFHTTPCookieStorageDeleteCookie CFHTTPCookieStorageGetCookieAcceptPolicy CFHTTPCookieStorageSetCookieAcceptPolicy CFHTTPCookieStorageSetCookies CFURLCacheCopyResponseForRequest CFURLCacheSetDiskCapacity CFURLCacheSetMemoryCapacity CFURLRequestCreateMutableCopy CFURLResponseCopySuggestedFilename CFURLResponseGetExpectedContentLength CFURLResponseGetHTTPResponse CFURLResponseGetMIMEType CFURLResponseGetURL CFURLResponseSetExpectedContentLength CFURLResponseSetMIMEType _CFNetworkHTTPConnectionCacheGetLimit _CFNetworkHTTPConnectionCacheSetLimit _CFURLCacheCopyCacheDirectory _CFURLRequestCreateArchiveList _CFURLRequestCreateFromArchiveList _CFURLResponseCreateArchiveList _CFURLResponseCreateFromArchiveList _CFURLResponseGetSSLCertificateContext _LSGetCurrentApplicationASN _LSSetApplicationInformationItem _kLSDisplayNameKey kCFStreamPropertyCONNECTAdditionalHeaders kCFStreamPropertyCONNECTProxy kCFStreamPropertyCONNECTProxyHost kCFStreamPropertyCONNECTProxyPort kCFStreamPropertyCONNECTResponse 来自框架的kCFURLResponseExpectedContentLengthUnknown: '/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices'
来自框架的NSPopAutoreleasePool NSPushAutoreleasePool: '/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation'
CARenderCGDestroy CARenderCGNew CARenderCGRender CARenderNotificationAddObserver CARenderNotificationRemoveObserver CARenderServerGetPort CARenderServerStart CARenderUpdateAddContext CARenderUpdateAddRect CARenderUpdateBegin CARenderUpdateFinish 来自框架的kCAContextPortNumber: '/System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore'
如果您在源代码中定义了与其名称相同的方法 上面提到的API,我们建议改变你的方法名称 他们不再与Apple的私人API发生冲突,以避免你的 申请在未来的提交中被标记。
另外,上述API中的一个或多个可以驻留在a中 您的应用程序附带的库。如果您无权访问 在库的源代码中,您可以搜索已编译的二进制文件 使用“strings”或“otool”命令行工具。 “字符串”工具可以 输出库调用的方法列表和“otool -ov” 将输出Objective-C类结构及其定义的结构 方法。这些技巧可以帮助您缩小范围 有问题的代码驻留。
答案 0 :(得分:2)
我终于找到了这些所谓的私有api被召唤的地方。它们是从webkit内部调用的。 webkit使用webkit系统接口库,该库直接由apple以编译的静态库+头文件的格式提供。更具体地说,它们是位于src \ 3rdparty \ webkit \ WebKitLibraries路径下的四个文件:
libWebKitSystemInterfaceLeopard.a libWebKitSystemInterfaceLion.a libWebKitSystemInterfaceMountainLion.a libWebKitSystemInterfaceSnowLeopard.a
我总是想知道它是否真的是一个私人api,还有谁知道如何在没有任何文档的情况下调用它?现在它变成了苹果本身。由于nokia或digia都没有这些库的源代码,因此他们可能无能为力。
现在具有讽刺意味的是,由于创建了库的私有api访问权限,任何基于qtwebkit的应用程序都会被苹果拒绝吗?
如果我错了或错过了什么,请纠正我。我真的希望我错了。