프로젝트의 여러 대상 및 플랫폼에 대한 Swift Package 소비?
iOS 앱, 시계 등 여러 대상을 가진 프로젝트가 있습니다.OS 앱, 그리고 몇 가지 프레임워크.내가 원하는 모든 대상에 동일한 Swift Package를 할당하려면 어떻게 해야 합니까?Xcode만 선택할 수 있습니다.
Swift Package를 다시 추가하여 프로젝트의 다른 대상에 할당하려고 하면 오류가 발생합니다.
이것을 하는 올바른 방법은 무엇입니까?아래는 스위프트 패키지의 패키지 매니페스트입니다.그 쪽에서 해야 할 일이나 Xcode에서 제가 해야 할 일이 있나요?
import PackageDescription
let package = Package(
name: "Alamofire",
platforms: [
.macOS(.v10_12),
.iOS(.v10),
.tvOS(.v10),
.watchOS(.v3)
],
products: [
.library(
name: "Alamofire",
targets: ["Alamofire"])
],
targets: [
.target(
name: "Alamofire",
path: "Source")
],
swiftLanguageVersions: [.v5]
)
저도 같은 문제가 있었는데, 이 두 가지 해결책만 발견했습니다.
먼저 첫 번째 대상에 패키지를 추가합니다.
그런 다음 첫 번째 옵션이 다른 대상인 General(일반) 탭으로 이동하고 Frameworks(프레임워크), Libraries(라이브러리) 및 Embedded Content(임베디드 콘텐츠)에서 +를 누른 다음 패키지를 선택하고 Add(추가)를 누릅니다.
다른 옵션은 위상을 구축하고 라이브러리와 이진 연결에서 비슷한 방식을 반복하는 것입니다.
저는 현재 이 옵션만 알고 있습니다. 예를 들어 애플이 멀티체크로 이를 개선할 수 있기를 바랍니다.
디에고 카레라가 제공한 솔루션 외에도 프레임워크 대화 상자의 모든 대상이 패키지를 사용할 수 있도록 신속한 패키지 캐시를 재설정해야 했습니다.
Xcode:파일 -> Swift Packages -> 패키지 캐시 재설정
크리에이티브 코딩이라는 iOS Target과 mandelbrot라는 Mac 명령줄 Target이 포함된 프로젝트에 새로운 Numerics 패키지를 추가하려고 할 때도 같은 문제가 발생했습니다.
저는 첫 번째 타겟에 Xcode의 일반적인 방식으로 패키지를 추가했습니다.그런 다음 Xcode를 그만두고 편집기에서 project.pbxproj 파일을 열었습니다(물론 vi.그런 다음 / Begin PBXNativeTarget 섹션 / comment로 내려가 CreativeCoding 대상을 찾아 새로운 Numerics 패키지(Numerics, ComplexModule, RealModule)가 포함된 PackageProductDependency 컨테이너에서 3줄을 복사하여 mandelbrot 명령줄 대상의 PackageProductDependency 컨테이너에 붙여넣었습니다.
/* Begin PBXNativeTarget section */
8B083F4B24F0B40000A225C8 /* CreativeCoding */ = {
isa = PBXNativeTarget;
buildConfigurationList = 8B083F6024F0B40200A225C8 /* Build configuration list for PBXNativeTarget "CreativeCoding" */;
buildPhases = (
8B083F4824F0B40000A225C8 /* Sources */,
8B083F4924F0B40000A225C8 /* Frameworks */,
8B083F4A24F0B40000A225C8 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = CreativeCoding;
packageProductDependencies = (
8B22BD29263E328B00867530 /* ComplexModule */,
8B22BD2B263E328B00867530 /* RealModule */,
8B22BD2D263E328B00867530 /* Numerics */,
);
productName = CreativeCoding;
productReference = 8B083F4C24F0B40000A225C8 /* CreativeCoding.app */;
productType = "com.apple.product-type.application";
};
8BE83F4F26213D1C00663AC9 /* mandelbrot */ = {
isa = PBXNativeTarget;
buildConfigurationList = 8BE83F5626213D1D00663AC9 /* Build configuration list for PBXNativeTarget "mandelbrot" */;
buildPhases = (
8BE83F4C26213D1C00663AC9 /* Sources */,
8BE83F4D26213D1C00663AC9 /* Frameworks */,
8BE83F4E26213D1C00663AC9 /* CopyFiles */,
);
buildRules = (
);
dependencies = (
);
name = mandelbrot;
packageProductDependencies = (
8BB120942622CCB8008EDAB0 /* ArgumentParser */,
8B22BD29263E328B00867530 /* ComplexModule */,
8B22BD2B263E328B00867530 /* RealModule */,
8B22BD2D263E328B00867530 /* Numerics */,
);
productName = mandlebrot;
제가 방금 3개의 새로운 라인을 추가한 두 번째 대상에 이미 ArgumentParser 패키지를 가지고 있었기 때문에 저는 조금 더 쉬웠을 수도 있습니다.그러나 동일한 작업을 수행하여 두 번째 대상에 임시 패키지를 추가할 수 있습니다.
그런 다음 Xcode로 들어가 정상처럼 두 개의 목표물을 구축했고 작동했습니다.
저에게는 Xcode 14.2 버전이었습니다.대상에 추가하고 싶은 프레임워크가 보이지 않았는데 최신 Xcode 14.3.1로 업데이트하여 문제가 해결되었습니다.두 번째 타겟에 추가하고 싶은 스위프트 패키지를 볼 수 있었고 성공적으로 추가했습니다.
Diego의 답변 https://stackoverflow.com/a/58079416/2929892 을 사용하여 누락된 프레임워크를 추가했습니다.
종속성을 추가한 후 새 대상을 추가하면 프로젝트에서 종속성을 제거한 다음 다시 추가해야 합니다.그렇지 않으면 라이브러리가 프레임워크 선택자에 나타나지 않습니다.
Xcode가 Swift Package Manager에서 할 수 있는 신뢰할 수 있는 한 가지 일은 저에게 충돌입니다.따라서 프로젝트를 열기만 하면 Xcode가 크래시 되는 상태가 될 수 있으므로 프로젝트 백업을 반드시 준비해야 합니다.
Xcode 12에서는 두 번째 대상을 선택하고 의존성(swift package)을 추가하기만 하면 됩니다.
언급URL : https://stackoverflow.com/questions/57625952/consume-swift-package-for-multiple-targets-and-platforms-in-a-project
'it-source' 카테고리의 다른 글
SQL 데이터베이스에서 동일한 이름을 관리하는 방법은 무엇입니까? (0) | 2023.09.28 |
---|---|
Maria DB에 저장된 프로시저에서 여러 행을 반환하려면 어떻게 해야 합니까? (0) | 2023.09.28 |
Maria DB를 AWS에 연결할 수 없음 Quicksight (0) | 2023.09.23 |
형제 노드에 특정 값이 있는 경우 XPath를 사용하여 노드를 선택하는 방법은 무엇입니까? (0) | 2023.09.23 |
여러 표에서 구별되는 값을 선택하는 방법 (0) | 2023.09.23 |