如何通过CMake Xcode Generator启用Push Notifications推送通知能力?
解决CMake Xcode Generator启用推送通知无效的问题
问题原因
直接设置XCODE_ATTRIBUTE_ENABLE_PUSH_NOTIFICATIONS无法生效,是因为iOS推送通知的启用需要同时满足多条件:仅靠单个CMake属性无法完成全部配置,必须结合权限文件、Info.plist配置以及Xcode Capabilities开关三者协同。
可行解决方案
步骤1:给Info.plist添加后台推送支持
如果你的项目使用Info.plist.in模板(如代码中所示),在模板文件里插入以下内容:
<key>UIBackgroundModes</key> <array> <string>remote-notification</string> </array>
这一步是让应用获得后台接收推送的基础能力。
步骤2:创建推送权限配置文件
在iOS项目目录下新建一个权限文件,比如MyApp.entitlements,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <!-- 开发环境填development,生产环境切换为production --> <key>aps-environment</key> <string>development</string> </dict> </plist>
步骤3:在CMake中完善配置
修改set_target_properties代码块,添加权限文件关联,并保留推送开关设置:
set_target_properties(${TARGET_NAME} PROPERTIES # ... 你已有的其他属性 ... # 关联权限文件 XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/ios/MyApp.entitlements" # 开启Xcode推送通知开关 XCODE_ATTRIBUTE_ENABLE_PUSH_NOTIFICATIONS YES # 可选:指定开发团队ID,确保签名权限有效 # XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "你的团队ID" )
额外注意事项
- 确保你的Apple开发者账号已开通推送服务,且对应App ID已启用Push Notifications功能
- 开发/生产环境的
aps-environment值需对应切换,可通过CMake变量动态控制 - 建议使用CMake 3.20+版本,该版本对Xcode Capabilities的支持更稳定
内容的提问来源于stack exchange,提问作者Jiri Zaloudek
相关产品推荐
相关产品推荐

