文档章节

Bazel教程:构建iOS应用[翻译]

chai2010
 chai2010
发布于 2016/05/19 09:33
字数 998
阅读 394
收藏 9
点赞 2
评论 0

Bazel教程:构建iOS应用

本教程包含以下步骤(Bazel新用户请先参考: Bazel入门教程):

  • 代码预览
  • 创建BUILD构建文件
  • 针对模拟器构建应用
  • 查看构建输出
  • 在模拟器环境运行/调试应用
  • 针对设备构建应用
  • 安装应用到设备

需要在 Mac OS X 环境,WORKSPACE 不用配置。

查看源文件结构

iOS应用源文件在$WORKSPACE/ios-app/UrlGet目录。

代码在这里:https://github.com/bazelbuild/examples/tree/master/tutorial/ios-app/UrlGet

创建BUILD文件

在命令行用vi创建并编辑BUILD文件(其它编辑器也可以):

$ vi $WORKSPACE/ios-app/BUILD

添加一个objc_library规则

Bazel针对构建iOS应用提供了诸多规则命令。在这里,我们首先使用 objc_library 规则从源文件和Xib文件构建 静态库。 (这个只是最小的规则,此外还有ios_application规则可以用于构建多架构的iOS应用。)

BUILD的内容如下:

objc_library(
    name = "UrlGetClasses",
    srcs = [
        "UrlGet/AppDelegate.m",
        "UrlGet/UrlGetViewController.m",
    ],
    hdrs = glob(["UrlGet/*.h"]),
    xibs = ["UrlGet/UrlGetViewController.xib"],
)

规则对应的目标名字是UrlGetClasses

添加objc_binary规则

objc_binary 创建一个 bundled应用中的二进制可执行程序。

BUILD文件添加如下内容:

objc_binary(
    name = "ios-app-binary",
    srcs = [
        "UrlGet/main.m",
    ],
    deps = [
        ":UrlGetClasses",
    ],
)

其中deps属性引用了前面的UrlGetClasses静态库。

添加ios_application规则

ios_application 规则用于创建.ipa打包应用, 同时生成Xcode过程文件。

BUILD文件添加如下内容:

ios_application(
    name = "ios-app",
    binary = ":ios-app-binary",
    infoplist = "UrlGet/UrlGet-Info.plist",
)

完整的BUILD文件在这里:https://github.com/bazelbuild/examples/blob/master/tutorial/ios-app/BUILD

构建模拟器环境的应用

命令行环境,确保当前目录对应Bazel的workspace:

$ cd $WORKSPACE

输入以下命令构建应用:

$ bazel build //ios-app:ios-app

Bazel将启动构建工作。当构建完成时,输出类似下面的信息:

INFO: Found 1 target...
Target //ios-app:ios-app up-to-date:
  bazel-bin/ios-app/ios-app.ipa
  bazel-bin/ios-app/ios-app.xcodeproj/project.pbxproj
INFO: Elapsed time: 3.765s, Critical Path: 3.44s

查找构建的输出

输出的.ipa和其它文件在$WORKSPACE/bazel-bin/ios-app目录。

模拟器环境运行/调试应用

现在可以从Xcode环境的模拟器来运行应用。先打开$WORKSPACE/bazel-bin/ios-app/ios-app.xcodeproj工程文件, 然后选择相应版本的iOS模拟器,然后点击 Run 按钮运行。

注意: 如果要Xcode工程中的任何信息发生变化(比如删除文件或添加/改变依赖),必须使用Bazel重新生成Xcode工程文件。

针对设备构建应用

针对设备构建应用,需要设置bazel以找到目标对应设备的provisioning profile配置文件。 根据以下步骤设置:

  1. 打开网页 Apple Profiles 下载设备对应的provisioning profile配置文件。 如果又疑问,请参考 Apple's documentation

  2. 将profile配置文件放到$WORKSPACE/tools/objc目录。

  3. 可选操作 - 可以在.gitignore中忽略配置文件。

  4. 编辑 $WORKSPACE/tools/objc/BUILD 文件,添加:

    filegroup(
        name = "default_provisioning_profile",
        srcs = ["<NAME OF YOUR PROFILE>.mobileprovision"],
    )
    

现在可以构建针对设备的应用了:

$ bazel build //ios-app:ios-app --ios_multi_cpus=armv7,arm64

上面的命令将构建针对多个类型的设备应用。如果只需要构建真的特定类型的应用, 可以指定一个特定的设备架构体系结构。

如果需要选择一个特定版本的Xcode或特定版本的SDK,可以通过--xcode_version=7.2 --ios_sdk_version=9.2指定。 要确保选定版本的SDK对应的Xcode已经安装到本机。

如果需要指定一个能够运行的最小iOS版本,可以通过--ios_minimum_os=7.0指定。

安装应用到设备上

安装应用到设备最简单的方法是打开Xcode,然后点击Windows > Devices菜单。 从左边列表选择相应的设备,点击 "+" 按钮并选择生成的 .ipa 文件。

如果程序没有运行,请检查设备和provisioning profile配置是否匹配。 点击Devices下面的View Device Logs按钮,可以查看到相关的错误信息。


https://chai2010.cn/

© 著作权归作者所有

共有 人打赏支持
chai2010

chai2010

粉丝 414
博文 99
码字总数 81410
作品 10
武汉
程序员
10个优秀Objective-C和iOS开发在线视频教程

如果你自己开发iOS应用,你肯定会发现网上有很多资源。学习编程的一个最好的方法就是自己写代码,而开始写代码的最快的方式就是看其他人怎么写。我们从海量视频和学习网站中整理出了我们认为...

mingxun
2014/05/09
0
0
IOS学习,最简单的表格应用程序,学习,列出博客

IOS编程浅蓝教程,这是博客地址http://www.cnblogs.com/haichao/category/425378.html IOS编程浅蓝教程:锲子 IOS编程浅蓝教程(一)先决条件:开始iOS编程的必要准备 IOS编程浅蓝教程(二) Hel...

andy521zhu
2015/01/17
0
0
Mac下安装ionic和cordova,并生成iOS项目

为了开发HTML5,除了最新使用React Native等之外,目前首选的为稳定的ionic+Angularjs来开发iOS和android. Ionic(ionicframework一款接近原生的HTML5移动App开发框架 会html css js就可以开发...

Michaelyn
2017/10/23
0
0
【AR】开始使用Vuforia开发iOS(2)

原 设置iOS开发环境 安装Vuforia iOS SDK 如何安装Vuforia iOS示例 编译并运行Vuforia iOS示例 支持iOS金属 iOS 64位迁移 设置iOS开发环境 适用于iOS的Vuforia引擎目前支持运行iOS 9及更高版...

lichong951
06/11
0
0
在Visual Studio中使用C#开发iOS & Android应用程序

Xamarin与微软合作,使开发人员可以在Visual Studio中构建iOS和Android应用程序。Xamarin大学教开发人员如何做。 Xamarin已于11月13日宣布与微软合作,为使用C#和Visual Studio构建完全原生的...

Yamazaki
2013/11/22
0
0
天生不凡ios怎么在电脑上玩 天生不凡ios电脑版玩法教程

天生不凡ios怎么在电脑上玩呢?现在有很多小伙伴都在玩天生不凡手游,不过相对于传统的在手机上进行游戏,很多人都倾向于新玩法,就是在电脑上玩天生不凡手游。下面小编就给亲们介绍下天生不...

kaopu8520
05/29
0
0
资源分享-开发工具-Java2ObjC

本文来自我我的博客:https://www.lwxshow.com/soft/resource-sharing-tools-java2objc.html 今天为大家推荐一款:java转objective-c代码工具. 大家都想直接将java代码转成objective-c代码,手...

卢卫湘
2013/06/17
0
0
那些在学习iOS开发前就应该知道的事(part 1)

英文原文:Things I wish I had known before starting iOS development—Part 1 设计师设计出来了一个不错的引导界面,然而当我看到设计稿的时候,我们的app也没几天就要上线了。这个界面模...

TomatosX
2015/06/12
0
0
swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程

swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程 1.2.3 注册非免费苹果账号swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程 免费的苹果账号在开发应用程序时会受到了很...

大学霸
2015/01/29
0
0
一步一步学习iOS 5编程(第三版)-PDF中文版-正式发布!

目前,这是第一本介绍iOS 5.x 和 Xcode 4.4 的中文版书籍,尤其适合于iOS 编程开发初学者。本教程由 EntLib.com 团队编写。如有任何技术问题,欢迎留言。 电子版 – PDF 格式,支持iPhone、i...

entlib
2012/09/20
0
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

nginx负载均衡

一、nginx 负载均衡 拓扑图: 主机信息: 1、负载均衡器1(lb1):192.168.10.205 RHEL7.5 2、负载均衡器2(lb2):192.168.10.206 RHEL7.5 3、web服务器1(web01):192.168.10.207 Centos...

人在艹木中
4分钟前
0
0
Java Stream 简单使用

什么是流 Stream 不是集合元素,它不是数据结构并不保存数据,它是有关算法和计算的,它更像一个高级版本的 Iterator。原始版本的 Iterator,用户只能显式地一个一个遍历元素并对其执行某些操...

阿豪boy
12分钟前
0
0
做了一个小网站

做了一个小网站 www.kanxs123.com

叶落花开
今天
0
0
继社会佩奇之后,又尝试了可爱的蓝胖子,有趣 Python

#哆啦A梦# !/usr/bin/env python3# -*- coding: utf-8 -*-# @Author: dong dong# @Env: python 3.6from turtle import *# 无轨迹跳跃def my_goto(x, y): penup(...

Py爱好
今天
0
0
shell及python脚本方式登录服务器

一、问题 在工作过程中,经常会遇见需要登录服务器,并且因为安全的原因,需要使用交互的方式登录,而且shell、python在工作中也经常用到,并且可以提供交互的功能。都是利用了expect、spawn...

yangjianzhou
今天
0
0
upstream sent too big header while reading...

nginx 报错:1736 upstream sent too big header while reading response header from upstream 1. 一般处理 location ~ \.php$ { #增加下面两句 fastcgi_buffer_size 128k; ......

dubox
今天
0
0
Python解析配置文件模块:ConfigPhaser

import configparser as pa# [SectionA]# a = aa# b = bb# c = cc# [SectionB]# optionint = 1# optionfloat = 1.1# optionstring = string#https://www.cnblogs.com/a......

易野
今天
0
0
Java基础——面向对象

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 Object的方法: clone() Object 克隆 to Strin...

凯哥学堂
今天
0
0
rabbitmq学习记录(八)消息发布确认机制

RabbitMQ服务器崩了导致的消息数据丢失,已经持久化的消息数据我们可以通过消息持久化来预防。但是,如果消息从生产者发送到vhosts过程中出现了问题,持久化消息数据的方案就无效了。 Rabbit...

人觉非常君
今天
0
0
大数据基础知识,大数据学习,涉及的知识点

一、什么是大数据 一种规模大到在获取、存储、管理、分析方面大大超出了传统数据库软件工具能力范围的数据集合,具有海量的数据规模、快速的数据流 转、多样的数据类型和价值密度低四大特征。...

董黎明
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部