2012-12-28 39 views
2

我们基于qtwebkit的应用程序在提交给mac应用商店后被苹果拒绝。拒绝的原因之一是使用非公开API。我已经在qtwebkit的源代码中发现了其中的六个。但我没有找到其余的地方。我搜索了我们的应用程序的源代码和QT的全部源代码。如何在Mac Qt App中找到非公开API的用法

六个非公开的API我在QtWebKit的来源发现的是:

CFHTTPCookieStorageSetCookieAcceptPolicy 
CFURLCacheCopyResponseForRequest 
CFURLResponseGetMIMEType 
CFURLResponseCopySuggestedFilename 
CFURLCacheSetMemoryCapacity 
CFURLCacheSetDiskCapacity 

这是侵犯苹果发现的完整列表:

使用非公开的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从 框架: “/系统/库/框架/ Carbon.framework /版本/ A /炭”

CFReadStreamSignalEvent _CFAppVersionCheckLessThan _CFBundleSetDefaultLocalization _CFStringGetUserDefaultEncoding从框架: '/ System/Library/Frameworks/CoreFoundation。框架/版本/ A /的CoreFoundation”

CFHTTPCookieStorageCopyCookiesForURL CFHTTPCookieStorageDeleteCookie CFHTTPCookieStorageGetCookieAcceptPolicy CFHTTPCookieStorageSetCookieAcceptPolicy CFHTTPCookieStorageSetCookies CFURLCacheCopyResponseForRequest CFURLCacheSetDiskCapacity CFURLCacheSetMemoryCapacity CFURLRequestCreateMutableCopy CFURLResponseCopySuggestedFilename CFURLResponseGetExpectedContentLength CFURLResponseGetHTTPResponse CFURLResponseGetMIMEType CFURLResponseGetURL CFURLResponseSetExpectedContentLength CFURLResponseSetMIMEType _CFNetworkHTTPConnectionCacheGetLimit _CFNetw orkHTTPConnectionCacheSetLimit _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/F oundation.framework /版本/ C /基金会从框架

CARenderCGDestroy CARenderCGNew CARenderCGRender CARenderNotificationAddObserver CARenderNotificationRemoveObserver CARenderServerGetPort CARenderServerStart CARenderUpdateAddContext CARenderUpdateAddRect CARenderUpdateBegin CARenderUpdateFinish kCAContextPortNumber: '/System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore'

如果您在源代码中定义了与上述API相同名称的方法,我们建议更改您的方法名称,以便 他们不再与Apple的私有API冲突,以避免您的 应用程序在将来的提交中被标记。

此外,上述API中的一个或多个可能驻留在应用程序附带的 库中。如果您无权访问库的源代码,则可以使用“strings”或“otool”命令行工具搜索编译的二进制文件 。 “字符串”工具可以输出库调用的方法列表,“otool -ov”将输出Objective-C类结构及其定义的 方法。这些技术可以帮助您缩小有问题的代码所在的位置。

+0

值得一提的是你正在使用哪个版本的Qt? –

回答

2

我终于追查到这些所谓的privatate apis被称为的位置。他们从webkit内部调用。 webkit使用一个webkit系统接口库,它是以编译静态库+头文件的格式直接从苹果提供的。更具体地讲,他们是四个文件所在的路径下的src \的3rdParty \ WebKit的\ WebKitLibraries:

libWebKitSystemInterfaceLeopard.a libWebKitSystemInterfaceLion.a libWebKitSystemInterfaceMountainLion.a libWebKitSystemInterfaceSnowLeopard。a

我总是想知道它是否真的是私人api,还有谁会知道如何在没有任何文档的情况下调用它?现在它变成了苹果本身。由于诺基亚或digia都没有这些库的源代码,因此他们可能无法做到这一点。

由于创建库的私有api访问权限,任何基于qtwebkit的应用程序都将被拒绝,这是不是很讽刺?

如果我错了或错过任何东西,请纠正我。我真的很希望我错了。

+1

您建立的是哪个版本的QT? –

+2

你有没有得到你的应用程序批准? –

相关问题