📄
Henry
  • Henry的神秘小屋
  • 其他
    • 字节码与机器码的区别?
  • ObjectiveC
    • NSInvocation
    • 检测OC项目中未使用的方法
    • Method Selector
    • 消息转发
  • Swift
    • 检测Swift项目中未使用的类 方法 属性
    • NSCoding
    • Mirror
    • JSONEncode JSONDecode
    • Any AnyObject AnyClass
    • is as? as! as
  • Cocoapods
    • 看懂Podfile.lock文件
    • 在编写的Pod中使用宏预编译
  • iOS
    • 苹果应用 保持画面流畅
    • 关于计算机展示图像的一些问题
    • @testable
    • iOS中URLRequest的缓存策略
    • CodePush接入流程
    • H5在WKWebView中读取沙盒文件
    • FDLog App客户端日志系统
    • 如何实现JSBridge基于WKWebView
    • 网络请求各个指标的度量
    • iOS13 UIModalPresentationStyle
    • 实现H5离线包机制
    • NSURLProtocol 拦截器
    • Framework
    • Lock
    • CFNetwork NSURLSession NSURLConnection
    • setNeedsLayout layoutIfNeeded layoutSubviews
    • StackView
    • Flutter Method Channel:从Dart到Native调用链
    • JSONSerialization.ReadingOptions
    • JSONSerialization.WritingOptions
    • RunLoop高级2
    • RunLoop高级1
    • RunLoop中级
    • RunLoop初级
    • LineBreak AutoShrink
    • 如何给H5出WebView调试包
    • TODO、FIXME、!!!、???、MARK
    • Operation的使用
    • UserDefault
    • 了解WKWebView
    • 输出日志信息到系统控制台
    • Float Double 失去精度问题
    • 使用xcodebuild命令打包导出
    • 在iOS项目中使用C++定义的模块
    • 证书问题
    • 创建常驻线程
  • 源码
    • 阅读PINCache源码
    • 解读AspectHook
    • HandyJSON是如何实现的?
  • 汇编
    • 看懂汇编
由 GitBook 提供支持
在本页
  • 开始
  • 总结

这有帮助吗?

  1. iOS

使用xcodebuild命令打包导出

上一页Float Double 失去精度问题下一页在iOS项目中使用C++定义的模块

最后更新于5年前

这有帮助吗?

当前环境: Xcode10.0 Swift4.2 iOS SDK 12.1

开始

在写之前要有几个东西先确定下,几个东西。

一,BuildConfiguration

这是一个非常重要的选项,先说一个用到他的例子,一般项目都有各种环境,在同一个位置会有不同的行为,我们要怎么判断呢,Xcode 提供了一个 Project 级别的参数就是 BuildConfiguration,我们可以设置有 N 个BuildConfiguration,来在代码里面控制代码的不同行为,下面用个截图来看。

当设置好了 BuildConfiguration,可以对应设置宏来进行条件编译,

二,Target

一个 Project 下可以创建多个 Target,比如 Xcode 默认的空模版,就会在 Project 下给你建 3 个 Target,分别是

1 个项目 Target 1 个 UnitTest 的 Target 1个 UITest 对的Target

三,多个 Target 的作用

因为一套 Target 对应一套配置,比如我们的项目中,有两个 Target 分别对应不同的 BundleId,这个场景下,我们就有必要用两个 Target 来区分一下。 再者说两套配置不一样,一套给生产一套给其他环境,里面包含不同的加固配置等等,都可以用多个 Target 区分。

四,Scheme

一个 Target 可以对应多个 Scheme,当你创建 Scheme 的时候,是可以选择你的 Target 的,当创建 Scheme 的时候还有一个选项,Shared,当你创建的 Scheme 需要其他人也能看到的时候需要打勾,如果不需要其他人看到 不需要打勾。

五,关系

下图是他们的 Scope 的关系图。

从图中可以看出,1个 Project 可以配置多个 Target,1 个 Target 可以配置多个 Scheme。 BuildConfiguration 是在 Project 级别上的配置,所以他对下面所有 Target 都生效 。

六,Archive Export 命令

执行下面命令的时候 请确保你的证书和你的ID都是正确的。

# xcodebuild archive
# 先执行XcodeBuild Archive命令,生成.xcarchive文件(下图)。
xcodebuild -workspace `<Workspace名字>` -scheme `<Scheme名字>` -configuration `<BuildConfiguration名字>` -archivePath `<导出路径>` archive

# xcodebuild export
# 执行XcodeBuild Export命令,有一个选项 archivePath,将第一步生成的xcarchive文件路径输入进去,还有一个注意的是,exportOptionsPlist,这个参数文件,就是我们平时使用Xcode打包出来的文件夹里面包含的文件,表明你导出这个ipa的具体配置。
# 把之前Xcode图形化打包成功导出的ExportOptions.plist文件保存下来。
# 然后把ExportOptions.plist路径给下面的命令,就可以导出和上次一模一样的ipa包。  
# 注意:ExportOptions.plist:记录这你的导出参数,你是AppStore还是Development还是AdHoc等。
xcodebuild -exportArchive -archivePath `<Archive路径>` -exportPath `<Export路径>` -exportOptionsPlist `<ExportOptionsPlist文件路径>`

总结

  1. 如果 H5 想要可以在 Safri 调试的 App 应用 ipa,那么需要导出的时候选择 Development 导出方式即可。

  2. Development profile: 允许你去测试你的 App 在物理机器上,也就是真机上。

  3. App Store Distribution profile: 允许你签名你的 App 到 AppStore 去发布。

  4. Ad Hoc Distribution profile: 允许你去签名你的 App 去分发给内部指定人员去测试你的 App。

如何进行设置看这篇也许对你有帮助。