Bazel 튜토리얼: iOS 앱 빌드

문제 신고 소스 보기 1박 · 7.2 · 7.1 · 7.0 · 6.5 · 6.4

이 가이드에서는 Bazel을 사용하여 간단한 iOS 앱을 빌드하는 방법을 설명합니다.

학습할 내용

이 튜토리얼에서는 다음을 수행하는 방법을 알아봅니다.

  • Bazel 및 Xcode를 설치하고 다음 명령어를 다운로드하여 환경을 설정합니다. 샘플 프로젝트
  • 소스 코드가 포함된 Bazel 작업공간 설정 앱의 최상위 수준을 식별하는 WORKSPACE 파일 작업공간 디렉터리
  • 필요한WORKSPACE 외부 종속 항목
  • BUILD 파일 만들기
  • Bazel을 실행하여 시뮬레이터 및 iOS 기기용 앱 빌드
  • 시뮬레이터 및 iOS 기기에서 앱 실행

환경 설정

시작하려면 Bazel 및 Xcode를 설치하고 샘플 프로젝트를 가져옵니다.

Bazel 설치

설치 안내에 따라 Bazel을 설치합니다. kube-APIserver입니다

Xcode 설치

Xcode를 다운로드하여 설치합니다. Xcode에는 Bazel에서 빌드하는 데 필요한 컴파일러, SDK, 기타 도구가 포함되어 있습니다. Apple 애플리케이션.

샘플 프로젝트 가져오기

또한 GitHub에서 튜토리얼을 위한 샘플 프로젝트를 가져와야 합니다. GitHub 저장소에는 source-onlymain라는 두 개의 브랜치가 있습니다. source-only 브랜치 에는 프로젝트에 대한 소스 파일만 포함됩니다. 이 실습에서 다룰 파일은 이 튜토리얼에 나와 있습니다. main 브랜치에는 두 소스 파일이 모두 포함되어 있습니다. 및 완료된 Bazel WORKSPACEBUILD 파일입니다. 이 브랜치를 사용하여 튜토리얼 단계를 완료한 후 작업을 확인하세요.

명령줄에 다음을 입력하여 source-only의 파일을 가져옵니다. 브랜치:

cd $HOME
git clone -b source-only https://github.com/bazelbuild/examples

git clone 명령어는 $HOME/examples/라는 디렉터리를 만듭니다. 이 Bazel용 샘플 프로젝트가 여러 개 포함되어 있습니다. 이 작업의 프로젝트 파일 튜토리얼은 $HOME/examples/tutorial/ios-app에 있습니다.

작업공간 설정

작업공간은 하나 이상의 소프트웨어 프로젝트의 소스 파일 및 WORKSPACE 파일 및 BUILD 파일(Bazel이 빌드하는 데 사용하는 안내가 포함된 파일) 소프트웨어입니다. 작업공간은 출력으로 연결되는 심볼릭 링크를 포함할 수도 있습니다. 디렉터리

작업공간 디렉터리는 파일 시스템의 어디에나 위치할 수 있으며 루트에 WORKSPACE 파일이 있어야 합니다. 이 가이드에서는 작업공간 디렉터리는 $HOME/examples/tutorial/이며, 여기에는 프로젝트 파일을 다운로드합니다.

편의를 위해 이제 $WORKSPACE 환경 변수를 설정하여 다음을 참조합니다. 확인할 수 있습니다 명령줄에 다음을 입력합니다.

export WORKSPACE=$HOME/examples/tutorial

WORKSPACE 파일 만들기

모든 작업공간에는 최상위 수준에 WORKSPACE라는 텍스트 파일이 있어야 합니다. 작업공간 디렉터리에 표시됩니다 파일이 비어 있거나 참조가 포함되어 있을 수 있습니다. 외부 종속 항목 빌드에 필요한 외부 종속 항목 있습니다.

지금은 빈 WORKSPACE 파일을 만들어 보겠습니다. 이 파일은 단순히 작업공간 디렉터리를 식별합니다 이후 단계에서는 파일을 업데이트하여 외부 종속 항목 정보

명령줄에서 다음을 입력합니다.

touch $WORKSPACE/WORKSPACE
open -a Xcode $WORKSPACE/WORKSPACE

그러면 빈 WORKSPACE 파일이 생성되고 열립니다.

WORKSPACE 파일 업데이트

Apple 기기용 애플리케이션을 빌드하려면 Bazel이 Apple 빌드 규칙 찾을 수 있습니다 이를 사용 설정하려면 다음을 추가하세요. git_repository 드림 규칙을 WORKSPACE 파일에 추가합니다.

load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")

git_repository(
    name = "build_bazel_rules_apple",
    remote = "https://github.com/bazelbuild/rules_apple.git",
    tag = "0.19.0",
)

git_repository(
    name = "build_bazel_rules_swift",
    remote = "https://github.com/bazelbuild/rules_swift.git",
    tag = "0.13.0",
)

git_repository(
    name = "build_bazel_apple_support",
    remote = "https://github.com/bazelbuild/apple_support.git",
    tag = "0.7.2",
)

git_repository(
    name = "bazel_skylib",
    remote = "https://github.com/bazelbuild/bazel-skylib.git",
    tag = "0.9.0",
)

소스 파일 검토

다음 위치에 있는 앱의 소스 파일을 살펴보세요. $WORKSPACE/ios-app/UrlGet 다시 말하지만, 이제는 이 파일들을 보고 앱의 구조에 익숙해져야 합니다. 다음 중 어떤 것도 수정할 필요가 없습니다. 소스 파일을 사용하여 이 튜토리얼을 완료합니다.

BUILD 파일 만들기

명령줄 프롬프트에서 수정할 새 BUILD 파일을 엽니다.

touch $WORKSPACE/ios-app/BUILD
open -a Xcode $WORKSPACE/ios-app/BUILD

규칙 로드 문 추가

iOS 대상을 빌드하려면 Bazel이 GitHub 저장소에서 빌드 규칙을 로드해야 합니다. 확인할 수 있습니다 이러한 규칙을 프로젝트에서 사용할 수 있도록 하려면 다음 로드 문을 BUILD 파일의 시작 부분에 추가합니다.

load("@build_bazel_rules_apple//apple:ios.bzl", "ios_application")

ios_application 규칙만 로드하면 됩니다. objc_library Bazel 패키지에 내장되어 있습니다

objc_library 규칙 추가

Bazel은 Android용 앱을 빌드하는 데 사용할 수 있는 있습니다. 이 가이드에서는 먼저 Bazel에게 알려주는 objc_library 규칙 앱 소스 코드 및 Xib 파일에서 정적 라이브러리를 빌드하는 방법을 설명합니다. 그런 다음 사용자는 ios_application 드림 애플리케이션 바이너리와 .ipa 번들을 빌드하는 방법을 알려줍니다.

BUILD 파일에 다음을 추가합니다.

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

규칙의 이름 UrlGetClasses를 기록해 둡니다.

ios_application 규칙 추가

ios_application 드림 규칙이 애플리케이션 바이너리를 빌드하고 .ipa 번들 파일을 만듭니다.

BUILD 파일에 다음을 추가합니다.

ios_application(
    name = "ios-app",
    bundle_id = "Google.UrlGet",
    families = [
        "iphone",
        "ipad",
    ],
    minimum_os_version = "9.0",
    infoplists = [":UrlGet/UrlGet-Info.plist"],
    visibility = ["//visibility:public"],
    deps = [":UrlGetClasses"],
)

deps 속성이 UrlGetClasses 규칙의 출력을 참조하는 방법을 확인합니다. 위의 BUILD 파일에 추가합니다.

이제 파일을 저장하고 닫습니다. BUILD 파일을 완료된 예시 GitHub 저장소의 main 브랜치에서 확인할 수 있습니다.

앱 빌드 및 배포

이제 앱을 빌드하고 시뮬레이터와 기기에 배포할 준비가 되었습니다. 있습니다.

빌드된 앱은 $WORKSPACE/bazel-bin 디렉터리에 있습니다.

이 튜토리얼에서 완료한 WORKSPACEBUILD 파일은 다음 위치에 있습니다. 기본 브랜치 확인할 수 있습니다 다음에 대해 작업한 내용을 완료된 파일과 비교할 수 있습니다. 추가 도움말 또는 문제 해결 단계를 따르세요.

시뮬레이터용 앱 빌드

현재 작업 디렉터리가 Bazel 작업공간 내에 있는지 확인합니다.

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
INFO: Elapsed time: 0.565s, Critical Path: 0.44s

빌드 출력 찾기

.ipa 파일 및 기타 출력은 다음 위치에 있습니다. $WORKSPACE/bazel-bin/ios-app 디렉터리

시뮬레이터에서 앱 실행 및 디버그

이제 iOS 시뮬레이터를 사용하여 Xcode에서 앱을 실행할 수 있습니다. 먼저, Tulsi를 사용하여 Xcode 프로젝트 생성

그런 다음 Xcode에서 프로젝트를 열고 런타임 스키마로 iOS 시뮬레이터를 선택합니다. 실행을 클릭합니다.

를 참고하세요.

기기용 앱 빌드

iOS 기기에 설치되고 실행되도록 앱을 빌드하려면 Bazel이 프로비저닝 프로필을 설정해야 합니다. 다음 단계를 따르세요.

  1. Apple 개발자 계정으로 이동합니다. 을 열고 기기에 적합한 프로비저닝 프로필을 다운로드합니다. 자세한 내용은 Apple 문서 를 참조하세요.

  2. 프로필을 $WORKSPACE(으)로 이동합니다.

  3. (선택사항) .gitignore 파일에 프로필을 추가합니다.

  4. BUILD 파일의 ios_application 대상에 다음 줄을 추가합니다.

    provisioning_profile = "<your_profile_name>.mobileprovision",
    
를 통해 개인정보처리방침을 정의할 수 있습니다.

이제 기기에 맞는 앱을 빌드합니다.

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

이렇게 하면 앱이 fat 바이너리로 빌드됩니다. 특정 기기용으로 빌드 빌드 옵션에서 지정합니다.

특정 Xcode 버전용으로 빌드하려면 --xcode_version 옵션을 사용합니다. 받는사람 빌드하려면 --ios_sdk_version 옵션을 사용합니다. 이 대부분의 경우 --xcode_version 옵션으로 충분합니다.

필요한 최소 iOS 버전을 지정하려면 minimum_os_version를 추가합니다. 매개변수를 BUILD 파일의 ios_application 빌드 규칙에 추가합니다.

또한 툴시~ 명령줄이 아닌 GUI를 사용하여 앱을 빌드할 수 있습니다.

기기에 앱 설치

기기에 앱을 설치하는 가장 쉬운 방법은 Xcode를 실행하고 Windows > Devices 명령어. 왼쪽 상단의 추가 (더하기 기호) 버튼을 클릭하여 앱을 추가합니다. '설치된 앱' 빌드한 .ipa 파일을 선택합니다.

앱을 기기에 설치하지 못하는 경우 BUILD 파일에 올바른 프로비저닝 프로필 만들기 (이전의 4단계) 섹션).

앱이 실행되지 않는 경우 기기가 프로비저닝 프로필입니다. Devices 화면의 View Device Logs 버튼 Xcode는 무엇이 잘못되었는지에 대한 다른 정보를 제공할 수도 있습니다.

추가 자료

자세한 내용은 기본 브랜치 확인할 수 있습니다