## Console 程序 {#console}
创建空工程:
```sh
$ xmake create -l objc -t console test
```
更多例子见:[Objc Examples](https://github.com/xmake-io/xmake/tree/master/tests/projects/objc++)
## App 应用程序 {#application}
用于生成*.app/*.ipa应用程序,同时支持iOS/MacOS。
::: tip 注意
2.5.7 之后,可以支持直接添加 `*.metal` 文件,xmake 会自动生成 default.metallib 提供给应用程序加载使用。
:::
### 创建工程 {#create-project}
我们也可以通过模板工程快速创建:
```sh
$ xmake create -t xcode.macapp -l objc test
$ xmake create -t xcode.iosapp -l objc test
```
### 编译 {#build}
```sh
$ xmake f -p [iphoneos|macosx]
$ xmake
[ 18%]: compiling.xcode.release src/Assets.xcassets
[ 27%]: processing.xcode.release src/Info.plist
[ 72%]: compiling.xcode.release src/Base.lproj/Main.storyboard
[ 81%]: compiling.xcode.release src/Base.lproj/LaunchScreen.storyboard
[ 45%]: cache compiling.release src/ViewController.m
[ 63%]: cache compiling.release src/AppDelegate.m
[ 54%]: cache compiling.release src/SceneDelegate.m
[ 36%]: cache compiling.release src/main.m
[ 90%]: linking.release test
[100%]: generating.xcode.release test.app
[100%]: build ok!
```
### 配置签名 {#configure-sign}
对于iOS程序,默认会检测系统先用可用签名来签名app,当然我们也可以手动指定其他签名证书:
```sh
$ xmake f -p iphoneos --xcode_codesign_identity='Apple Development: xxx@gmail.com (T3NA4MRVPU)' --xcode_mobile_provision='iOS Team Provisioning Profile: org.tboox.test --xcode_bundle_identifier=org.tboox.test'
$ xmake
```
如果每次这么配置签名觉得繁琐的话,可以设置到`xmake global`全局配置中,也可以在xmake.lua中对每个target单独设置:
```lua
target("test")
add_rules("xcode.application")
add_files("src/*.m", "src/**.storyboard", "src/*.xcassets")
add_files("src/Info.plist")
add_values("xcode.bundle_identifier", "org.tboox.test")
add_values("xcode.codesign_identity", "Apple Development: xxx@gmail.com (T3NA4MRVPU)")
add_values("xcode.mobile_provision", "iOS Team Provisioning Profile: org.tboox.test")
```
那如何知道我们需要的签名配置呢?一种就是在xcode里面查看,另外xmake也提供了一些辅助工具可以dump出当前可用的所有签名配置:
```sh
$ xmake l private.tools.codesign.dump
==================================== codesign identities ====================================
{
"Apple Development: waruqi@gmail.com (T3NA4MRVPU)" = "AF73C231A0C35335B72761BD3759694739D34EB1"
}
===================================== mobile provisions =====================================
{
"iOS Team Provisioning Profile: org.tboox.test" = "
AppIDName
XC org tboox test5
ApplicationIdentifierPrefix
43AAQM58X3
...
```
我们也提供了其他辅助工具来对已有的ipa/app程序进行重签名,例如:
```sh
$ xmake l utils.ipa.resign test.ipa|test.app [codesign_identity] [mobile_provision] [bundle_identifier]
```
其中,后面的签名参数都是可选的,如果没设置,那么默认会探测使用一个有效的签名:
```sh
$ xmake l utils.ipa.resign test.ipa
$ xmake l utils.ipa.resign test.app "Apple Development: waruqi@gmail.com (T3NA4MRVPU)"
$ xmake l utils.ipa.resign test.ipa "Apple Development: waruqi@gmail.com (T3NA4MRVPU)" iOS Team Provisioning Profile: org.tboox.test" org.tboox.test
```
### 运行应用程序 {#run-program}
目前仅支持运行 macOS 程序:
```sh
$ xmake run
```
效果如下:

### 生成程序包 {#package}
如果是 iOS 程序会生成ipa安装包,如果是macos会生成dmg包(dmg包生成暂时还在开发中)。
```sh
$ xmake package
output: build/iphoneos/release/arm64/test.ipa
package ok!
```
我们也提供了辅助工具,来对指定app程序进行打包:
```sh
$ xmake l utils.ipa.package test.app output.ipa [iconfile.png]
```
### 安装 {#install}
如果是iOS程序会安装ipa到设备,如果是macos会安装app到/Applications目录。
```sh
$ xmake install
```
我们也提供了辅助工具,来对指定ipa/app程序安装到设备:
```sh
$ xmake l utils.ipa.install test.app
$ xmake l utils.ipa.install test.ipa
```
### 卸载 {#uninstall}
::: tip 注意
目前仅支持macos程序卸载
:::
```sh
$ xmake uninstall
```
## Framework 库程序 {#Framework}
我们也可以通过模板工程快速创建:
```sh
$ xmake create -t xcode.framework -l objc test
```
另外,xmake v2.3.9 以上版本,xmake 还提供了带有 framework 库使用的完整 iosapp/macapp 空工程模板,可以完整体验 framework 的编译,依赖使用以及集成到 app 应用程序中。
同时,如果我们开启了模拟器,xmake 可以支持直接 `xmake install` 和 `xmake run` 将 app 安装到模拟器并加载运行。
```sh
$ xmake create -t xcode.iosapp_with_framework -l objc testapp
$ cd testapp
$ xmake f -p iphoneos -a x86_64
$ xmake
$ xmake install
$ xmake run
```
## Bundle 程序 {#bundle}
我们也可以通过模板工程快速创建:
```sh
$ xmake create -t xcode.bundle -l objc test
```