关于App因使用prefs:root="GraphicsServices.framework"遭拒的技术咨询
Hey there, I’ve dealt with this exact rejection a few times before—let’s break down how to fix it and get your app approved quickly.
First, let’s recap the core issue from Apple’s rejection notice:
准则2.5.1 - 性能 - 软件要求 您的App使用或引用了以下非公开API:prefs:root="GraphicsServices.framework"。App Store禁止使用非公开API,因其变更可能导致用户体验下降。若后续提交仍使用或隐瞒该类API,可能导致苹果开发者账户被终止,及所有关联应用被移除……
Apple’s strict about private APIs because they can break without warning, so we need to fully eliminate any trace of this from your app. Here’s your step-by-step plan:
1. Track down where the private API is hiding
- Run a full global search across your entire project (code files, plists, and third-party dependencies) for:
GraphicsServices.frameworkprefs:rootreferences tied to GraphicsServices
- Start with your own code—if you added this directly, that’s an easy fix. If not, it’s almost certainly coming from an outdated third-party library (like old analytics tools, custom UI kits, or system utilities).
2. Remove or replace the private API
If it’s your own code:
Delete all calls to the private API right away. For common use cases, here’s the Apple-approved alternative:
- If you were trying to link to system settings: Use the public
UIApplicationOpenSettingsURLStringAPI instead. This lets users jump directly to your app’s dedicated settings page (Apple restricts direct access to global system graphics settings). Example in Swift:if let settingsURL = URL(string: UIApplicationOpenSettingsURLString) { UIApplication.shared.open(settingsURL) } - If you were using GraphicsServices for graphics-related data: Swap it out for public APIs like
UIScreen,CoreGraphics, orUIKitmethods that handle the same task. Apple’s official docs have all the tools you need here.
If it’s a third-party library:
- Check if the library has an updated version that removes the private API usage. Most reputable libraries fix these issues quickly once Apple flags them.
- If no update exists, replace the library with a comparable alternative that only uses public APIs.
3. Double-check you’ve cleaned everything up
Don’t just assume it’s gone—verify to avoid another rejection:
- Use Xcode’s Archive > Validate App tool before submitting. This runs a pre-check that catches most private API issues.
- For a deeper scan, use the
otoolcommand on your compiled binary. Open Terminal, navigate to your app’s archive folder, and run:
If no results appear, you’ve successfully removed the private API.otool -v -s __TEXT __objc_methname YourAppName.app/YourAppName | grep GraphicsServices
4. Submit with a clear note to reviewers
When you re-submit your app, add a message in the Notes to Reviewers section:
We have fully removed all references to the non-public GraphicsServices.framework API from our app. All functionality previously relying on this API has been replaced with Apple-approved public APIs, ensuring full compliance with App Store Guideline 2.5.1.
This helps reviewers quickly confirm you’ve addressed the issue.
内容的提问来源于stack exchange,提问作者Ciprian Rarau

