article thumbnail image
Published 2022. 12. 28. 18:05

이번 포스팅에서는 Tuist에 App Extension을 추가하는 방법에 대해 알아보겠습니다.

저는 Widget으로 예시를 들겠습니다.

Target 만들기

AppExtension은 Target으로 생성해줘야 합니다.

Target(name: "WidgetExtension",
		platform: .iOS,
		product: .appExtension,
		bundleId: bundleID + ".WidgetExtension",
		deploymentTarget: .iOS(targetVersion: iosVersion, devices: [.iphone]),
		infoPlist: .file(path: .relativeToRoot("WidgetExtension/Info.plist")),
		sources: [.glob(.relativeToRoot("WidgetExtension/**"))],
		resources: [.glob(pattern: .relativeToRoot("WidgetExtension/Resources/**"))],
		entitlements: .relativeToRoot("Supporting Files/WidgetExtension.entitlements"),
		dependencies: []
        )

여기서 중요한점은 product는 .appExtension으로 설정하시면 됩니다.

저는 루트디렉토리를 기준으로 WidgetExtension 디렉토리를 생성해 위젯관련 파일을 넣어뒀습니다.

infoPlist, sources, resources 전부 glob패턴으로 해당 디렉토리를 명시해줬습니다.

보통 App Extension을 사용하면 본 서비스와 데이터를 공유하기 위해 App Groups를 사용할텐데 그때 entitlements가 생성됩니다. 해당 entitlements경로도 지정해줍니다.

Project에 Target 설정하기

Project함수로 프로젝트를 생성하실 때 targets 매개변수에 해당 타겟을 추가해주시면 됩니다. 여기서 주의하실 점은 product가 .app인 프로젝트에만 .appExtension 타겟을 추가할 수 있습니다. framework는 안됩니다.

추가 방법은 https://cheonsong.tistory.com/15 에 가시면 확인하실 수 있습니다.

Dependencies 추가하기

product가 .app 으로 설정된 프로젝트에 타겟을 주입했기 때문에 마찬가지로 .app으로 설정된 프로젝트에

아래 형태로 TargetDependency를 생성 후 dpendencies에 주입해줍니다.

.target(name: "WidgetExtension")

이후 tuist generate하시면 Target에 추가됩니다~~

 

target name설정등 추가적인 사항은 Tuist 공식 문서에서 확인 가능합니다.

https://docs.tuist.io/examples/app-extensions/#product-types

 

App Extensions | Tuist Documentation

This page documents how to declare and use App Extension targets.

docs.tuist.io

 

복사했습니다!