XcodeGen Preview iOS 14의 작은 위젯을 사용할 때까지 설정

2020년 10월 25일: Intents Extension 시 Target 추가, Scheeme 추가!
안녕하세요, 저는 마을 송룡지개입니다!
iOS 14에 추가된 Widget(Widget Kit)을 구현해 보세요!
그래서 프로젝트를 시작하기로 결심했지만 결국 XcodeGen과 함께 사용할 수 없었다.
몇 시간 동안 개작project.yml하고 위젯의 프리뷰를 그어 메모로 남겼다.
위젯을 설치할 때 앞으로 추가 설정이 필요하다면 덧붙이고 싶어요.

먼저 Xcode로 Widget Extension 추가


Target에서
애플 Extension의 Widget Extension 제작을 선택합니다.
여기에는 위젯 엑스텐션이 SampleWidget이라는 이름으로 제작됐다고 가정한다.
다음 파일을 새로 만듭니다.
그나저나 추가 후 표시된 힌트 중 Activate를 선택하면 자동으로 추가Scheme된다.
SampleWidget/
  Assets.xcassets
  SampleWidget.intentdefinition
  SampleWidget.swift
  info.plit

project.yml


XcodeGen이 이 Widget Extension의 상태를 새로 재현하기 위해 설정 정보를 비교한 후 project.yml 파일에 추가했습니다.
프로젝트에 따라 추가가 됐을 수도 있고 추가가 필요하지 않은 것도 있지만 위젯 추가 시 구성에 최대한 맞춰보겠습니다.
마지막project.yml 파일의 전체 이미지를 올렸기 때문에 그걸 보면 이해하기 쉬울 거예요.
여기에 프로젝트 이름을 SampleApp로 설명한다.

settings 추가

VALIDATE_PRODUCT 진짜입니다. 여기에 보충합니다.
project.yml
name: SampleApp # プロジェクト名

options:
  deploymentTarget:
    iOS: 14.0 # 対象下限iOSバージョン

settings: # Project の Build Setting
  configs:
    Release:
      VALIDATE_PRODUCT: true # 生成されたProductに対して検証テストを行うかどうか

SampleApp의 Target에 추가 기록


project.yml
targets:
  SampleApp: # iOSアプリ本体のターゲット
    type: application
    platform: iOS
    sources:
      - SampleApp
      # Widgetのintentdefinitionファイルパスを追加
      - path: SampleApp/SampleWidget.intentdefinition
    settings:
      base:
        PRODUCT_BUNDLE_IDENTIFIER: com.example.SampleApp
        PRODUCT_NAME: $(TARGET_NAME)
        # Preview Contentのパスを追加
        DEVELOPMENT_ASSET_PATHS: "\"SampleApp/Preview Content\""
        # 追加
        ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES: true
        # プレビューを有効化
        ENABLE_PREVIEWS: true
        # アクセントカラー名を追加
        ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME: AccentColor
    dependencies:
      # Widget Extensionのターゲットを追加
      - target: SampleWidget
Widget Extension 대상 추가
Bundle ID 또는 dependenciesSwiftUI, WidgetKit SDK를 추가합니다.
project.yml
  SampleWidget: # Widget Extension
    type: app-extension
    platform: iOS
    settings:
      base:
        ## Bundle IDを忘れず追加
        PRODUCT_BUNDLE_IDENTIFIER: com.example.SampleApp.SampleWidget
        INFOPLIST_FILE: SampleWidget/Info.plist
        DEVELOPMENT_TEAM: XXXXXXXXXX
        SKIP_INSTALL: true
        PRODUCT_NAME: $(TARGET_NAME)
        ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME: AccentColor
        ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME: WidgetBackground
    sources:
      - SampleWidget
    dependencies:
      - sdk: SwiftUI.framework
      - sdk: WidgetKit.framework
Widget Extension용 Scheme 추가environmentVariables 등을 추가하는 것을 잊지 마세요.
project.yml
schemes:
  SampleWidgetExtension: # Scheme名は任意のものを
    build:
      targets:
        SampleWidget: all
        SampleApp: all
    run:
      config: Debug
      askForAppToLaunch: true
      debugEnabled: false
      environmentVariables:
        - variable: _XCWidgetKind
          value:
          isEnabled: false
        - variable: _XCWidgetDefaultView
          value: timeline
          isEnabled: false
        - variable: _XCWidgetFamily
          value: medium
          isEnabled: false
    test:
      config: Debug
    profile:
      config: Release
      askForAppToLaunch: true
    analyze:
      config: Debug
    archive:
      config: Release

Intents Extension을 추가할 때



Widget을 길게 누르면 "Widget 편집"메뉴가 표시되며 동적 목록으로 사용자에게 선택하려면 Intents Extension이 필요합니다.

먼저 Xcode에서 Intents Extension 추가


Target에서
애플 Extension의 Intents Extension 제작을 선택합니다.

여기에는 위젯 엑스텐션이 SampleIntent이라는 이름으로 제작됐다고 가정한다.

다음 파일을 새로 만듭니다.
그나저나 추가 후 표시된 힌트 중 Activate를 선택하면 자동으로 추가Scheme된다.

다음 파일이 생성되었습니다.
SampleIntent/
  IntentHandler.swift
  info.plit

project.yml


Type을 추가하거나 .intentdefinition에 parameter를 설정해야 합니다.
이 글은 XcodeGen에 초점을 맞추기 때문에 부분적인 실현을 생략하였다🙏
project.yml
  SampleIntent: # Intents Extension
    type: app-extension
    platform: iOS
    settings:
      base:
        ## Bundle IDを忘れず追加
        PRODUCT_BUNDLE_IDENTIFIER: com.example.SampleApp.SampleIntent
        INFOPLIST_FILE: SampleIntent/Info.plist
        SKIP_INSTALL: true
        PRODUCT_NAME: $(TARGET_NAME)
    sources:
      - SampleIntent
      - SampleWidget/SampleWidget.intentdefinition
Intents Extension용 Scheme 추가
project.yml
schemes:
  SampleIntent: # Scheme名は任意のものを
    build:
      targets:
        SampleIntent: all
        SampleApp: all
    run:
      config: Debug
      askForAppToLaunch: true
      debugEnabled: false
    test:
      config: Debug
    profile:
      config: Release
      askForAppToLaunch: true
    analyze:
      config: Debug
    archive:
      config: Release

project.yml의 전체상


마지막으로, 나는 나의 응용 프로그램 프로젝트에서 실제 Widget의 Preview를 성공적으로 project.yml 파일을 모두 업로드했다.
이것은 응용 프로그램에서 실제로 사용하는 파일 링크project.yml입니다.
https://github.com/Riscait/Graphidget/blob/develop/project.yml

Scheme 아이콘이 달라서 아쉽습니다.


방금 Xcode로 Widget Extension과 Scheme의 Scheme 아이콘을 추가했습니다.

XcodeGen에서 프로젝트를 생성할 때 Scheme 아이콘

(E) 제가 원했는데 Applian이 됐어요.
왜 이렇게 됐을까...

비교해 보면 BuildTargets의 배열 순서가 매우 이상하다.XocdeGen이 지정한 순서가 아니라 이름 순서?

이렇게 프리뷰도 되고 별 문제 없을 것 같은데 신경 쓰이네요👀
끝까지 읽어주셔서 감사합니다.🙏
더 좋은 글씨가 있어요!여기를 써보는 게 좋을 것 같아!만약 이런 구성이 나에게 알려줄 수 있다면 나는 매우 기쁠 것이다.
트위터에서도 Swift와 Fluter/Firebase!
팔로우 해주시면 감사하겠습니다.☺️ → 🐦촌송룡

좋은 웹페이지 즐겨찾기