XCode4 App Store提交小结

本文详细介绍了iOS应用程序从开发完成到最终发布的全过程,包括在iTunesConnect注册应用、获取发行证书、构建发行版、验证及上传应用等关键步骤。
  • 本文建立在你的应用程序已开发完成的基础上
  • 本文以理清流程为主
  • 本文的内容以Distribution为准,但是所附的参考资料也有对Ad Hoc的说明
  • 三种证书(Development、Distribution、Ad Hoc)的区别请参考:http://blog.sina.com.cn/s/blog_68444e230100srdn.html
  • 本文引用的官方资料以XCode 3为准,XCode 4的操作略有不同

正文 [建议:使用Safari浏览器]

  1. 准备注册App所需的材料。在这里查看。
  2. 在iTunes Connect中创建应用
    • 登陆iTunes Connect -> Manage Your Applications -> Add New App
    • 注册一个Bundle ID
    • 填写各种表单…
    • 注册成功的标志:应用详情页中的”status”为”Prepare for Upload”
  3. 认证
    • 按照官方的这个步骤进行
      • Obtaining your iOS Distribution Certificate
      • Create and download your iOS Distribution Provisioning Profile for App Store Distribution (Ad Hoc请参考Creating and Downloading a Distribution Provisioning Profile for Ad Hoc Distribution)
      • Building your Application with Xcode for Distribution,做到第7步就OK啦,即做到“In the project window, select the Distribution Active Configuration from the overview popup and set the Active SDK to the desired Device.”
    • 按照官方的步骤,Building your Application with Xcode for Distribution后面还有两个步骤,但是在XCode 4上会有所不同,下面是我的步骤
      • 参考这个步骤进行,除了Submit App To iTunes(注意:Organizer – Archives最后出来的app的version有可能是unspecified,这时需要为.plist文件增加“Bundle versions string, short”,并填入你的版本号。然后重新进行archive)。本步骤完成的标志:status为Passed Validation
      • 找到Validate通过的Xxx.xcarchive文件,右键Show Package Contents,在Products – Applications目录下会有.app文件。右键Compress Xxx.app后得到的Xxx.app.zip文件才是最后要提交的文件
  4. 上传应用
    • 2010年07月22日起必须通过Application Loader上传应用。详情请参考这里
    • Application Loader位于/Developer/Applications/Utilities目录,一路Next到将Xxx.app.zip文件上传完成即可。
    • 本步骤完成的标志:Application Loader展示Thank You页面
    • 进一步确认:iTunes Connect中应用的Status为”Waiting For Review”
【SCI一区复现】基于配电网韧性提升的应急移动电源预配置和动态调度(下)—MPS动态调度(Matlab代码实现)内容概要:本文档围绕“基于配电网韧性提升的应急移动电源预配置和动态调度”主题,重点介绍MPS(Mobile Power Sources)动态调度的Matlab代码实现,是SCI一区论文复现的技术资料。内容涵盖在灾害或故障等极端场景下,如何通过优化算法对应急移动电源进行科学调度,以提升配电网在突发事件中的恢复能力与供电可靠性。文档强调采用先进的智能优化算法进行建模求解,并结合IEEE标准测试系统(如IEEE33节点)进行仿真验证,具有较强的学术前沿性和工程应用价值。; 适合人群:具备电力系统基础知识和Matlab编程能力,从事电力系统优化、配电网韧性、应急电源调度等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于复现高水平期刊(SCI一区、IEEE顶刊)中关于配电网韧性与移动电源调度的研究成果;②支撑科研项目中的模型构建与算法开发,提升配电网在故障后的快速恢复能力;③为电力系统应急调度策略提供仿真工具与技术参考。; 阅读建议:建议结合前篇“MPS预配置”内容系统学习,重点关注动态调度模型的数学建模、目标函数设计与Matlab代码实现细节,建议配合YALMIP等优化工具包进行仿真实验,并参考文中提供的网盘资源获取完整代码与数据。
非常好的问题!我们来彻底澄清 **“两个 Target” 到底是什么意思**,以及它和“项目(Project)”、“代码复用”、“工程结构”的关系。 --- ### ✅ 回答:什么是“两个 Target”? 在 Xcode 中: > **一个 Project(项目)可以包含多个 Target(目标)** 每个 `Target` 代表: - 一个独立的可执行文件输出(比如一个 `.app`) - 有自己的编译设置(如 Bundle ID、编译标志、链接的框架等) - 可以选择性地包含不同的源文件或依赖库 所以: > 🔹 **使用“两个 Target” = 一套 Xcode 项目(.xcodeproj),但构建出两个不同的应用** 这正是推荐的做法! --- ### 📦 示例结构说明 ```text 📁 MyApp.xcodeproj ← 一个 Xcode 项目 │ ├── 📁 Sources/ │ ├── SharedModel.swift → 被两个 Target 共享 │ ├── ViewController.swift → 共享 UI 逻辑 │ ├── AppDelegate.swift → 条件编译控制 Sparkle │ └── Utils/ → 工具类,都被引用 │ ├── 🎯 Target 1: MyApp-Direct │ ├── Bundle ID: com.yourcompany.myapp │ ├── 引入 Sparkle 框架 ✅ │ ├── 编译条件:DEBUG/DIRECT_BUILD │ └── 输出:MyApp-Direct.app → 打包为 .dmg 发布官网 │ ├── 🎯 Target 2: MyApp-MAS │ ├── Bundle ID: com.yourcompany.myapp ✅(相同) │ ├── 不引入 Sparkle ❌ │ ├── 编译条件:MAC_APP_STORE=1 │ └── 输出:MyApp-MAS.app提交到 Mac App Store │ └── 🧩 SPM Dependencies (optional) └── Sparkle (仅被 MyApp-Direct 使用) ``` ✅ 所以结论是: | 问题 | 答案 | |------|------| | **有几个 Xcode 项目?** | 1 个 `.xcodeproj` 文件 | | **是几套代码?** | 一套核心代码 + 少量差异化配置 | | **有几个 Target?** | 2 个:`MyApp-Direct` 和 `MyApp-MAS` | | **输出几个应用包?** | 2 个独立的 `.app` 文件 | --- ### 💡 如何实现“共享代码”? Xcode 支持多种方式共享代码: #### 方法 1:直接将文件添加到多个 Target Membership 1. 创建文件 `SharedModel.swift` 2. 在右侧检查器中,勾选多个 Target: - [x] MyApp-Direct - [x] MyApp-MAS 👉 这样这个文件就会参与两个应用的编译。 ```swift // SharedModel.swift class UserDataManager { func saveName(_ name: String) { UserDefaults.standard.set(name, forKey: "username") } } ``` 无论哪个 Target 构建,都能使用这段代码。 #### 方法 2:抽取成 Framework / Static Library(更高级) 你可以创建一个叫 `MyAppCore` 的静态库或 framework: ```text 🎯 Target: MyAppCore (Swift Package 或 Internal Framework) └── 包含所有业务逻辑 ``` 然后让两个主 Target 都依赖它。适合大型项目。 --- ### ⚙️ 如何设置两个 Target 的差异? | 设置项 | MyApp-Direct | MyApp-MAS | |--------|--------------|----------| | **Bundle ID** | `com.yourcompany.myapp` | `com.yourcompany.myapp`(建议相同) | | **Sparkle 框架** | ✅ 添加并嵌入 | ❌ 完全不添加 | | **编译标志** | (空)或 `DIRECT_VERSION=1` | `MAC_APP_STORE=1` | | **Code Signing** | Developer ID Application | Mac App Store Distribution | | **Entitlements** | 启用 Sandbox + Hardened Runtime | 同左,由 Xcode 自动管理 | | **分发方式** | .dmg / .zip + 公证(Notarization) | 提交App Store Connect | --- ### 🧪 实际效果对比 | 用户场景 | 行为 | |--------|------| | 下载官网版 `.dmg` 安装 | 应用会自动检查更新(通过 Sparkle) | | 从 Mac App Store 安装 | 更新只能通过 MAS 完成,无弹窗提示 | | 升级时是否冲突? | 不冲突,系统识别为同一应用(同 Bundle ID) | | 数据是否共享? | ✅ 是,偏好设置、文档目录、钥匙串都共享 | --- ### ✅ 推荐操作步骤(在 Xcode 中创建第二个 Target) 1. 在 Xcode 中右键点击你的主 Target → **Duplicate** - 得到 `MyApp Copy` → 重命名为 `MyApp-MAS` 2. 修改新 Target 的: - **Bundle Identifier** → 可保持一致 - **Build Settings** → 添加 `MAC_APP_STORE` 到 “Active Compilation Conditions” 3. 在 **General → Frameworks** 中删除 Sparkle(只保留给原始 Target) 4. 清理不需要的资源(如非 MAS 图标等) 5. 分别为两个 Target 设置不同的 Scheme(便于切换构建) --- ### 📝 小结:一句话回答你 > 使用“两个 Target”意味着:**只有一个 Xcode 项目(.xcodeproj),一套核心代码,但生成两个不同配置的应用包** —— 一个用于官网发布(带 Sparkle),一个用于上架 Mac App Store(禁用 Sparkle),既保证了代码复用,又符合苹果审核要求。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值