로지컬한 내용이 아닌데다 대부분 기본적인 요소만 사용하기에 세부적인 항목에 대해선 그리 신경을 쓰진 않았는데, 프리빌드로 swift 파일이나 데이터를 검토, 생성하는 등의 작업에는 이해하고 있어야 하는 부분들이 생겼다.
일단 세부 내용은 애플 문서에 잘 나와있긴한데, 내부에 정의되는 항목들과 파라미터들이 어떤 녀석들인지 인지하기위해 전체적으로 항목들을 나열해 둔다.
참고사항
패키지 초기화
swift package init --type library

sample/ 폴더에서 초기화를 하니 패키지명과 프로덕트, 타겟이 루트폴더명으로 설정된다.
Sources/sample/sample.swift
Tests/sampleTests/sampleTests.swift
Package.swift
Package.swift 의 첫 라인은 버전을 표시하는데, 호환성을 위해 해당 라인을 필수로 포함해야 한다.
swift package init 명령을 사용하지 않는다면, Package.swift 를 아래처럼 생성해주면 된다.
// swift-tools-version: 6.2
import PackageDescription
let package = Package(
name: "MyPackage"
)
xcode 열기
open Package.swift
Package
https://developer.apple.com/documentation/packagedescription/package
Package | Apple Developer Documentation
The configuration of a Swift package.
developer.apple.com
패키지를 생성한다. 아래 생성자 외에도 5개 정도 생성자가 추가로 있음.
Package(
name: String,
defaultLocalization: LanguageTag? = nil,
paltforms: [SupportedPlatform]? = nil,
pkgConfig: String? = nil,
providers: [SystemPackageProvider]? = nil,
products: [Product] = [],
dependencies: [Package.Dependency] = [],
targets: [Target] = [],
swiftLanguageModes: [SwiftLanguageMode]? = nil,
cLanguageStandard: CLanguageStandard? = nil,
cxxLanguageStandard: CXXLanguageStandard? = nil
)
// swift 6.1 : traits 항목 추가
SupportedPlatform
.iOS(SupportedPlatform.IOSVersion)
.iOS(String)
.iOS
.macOS(SupportedPlatform.MacOSVersion)
.macOS(String)
.macOS
// 기타 watchOS, visionOS, tvOS, macCatalyst, driverKit
SystemPackageProvider
.apt([String])
.brew([String])
.nuget([String])
.yum([String])
Dependency
.package(url: String, from: Version)
.package(url: String, Range<Version>)
.package(url: String, ClosedRange<Version>)
.package(url: String, branch: String)
.package(url: String, revision: String)
.package(url: String, exact: String)
.package(id: String, from: Version)
.package(id: String, Range<Version>)
.package(id: String, ClosedRange<Version>)
.package(id: String, exact: String)
.package(name: String, path: String)
// swift 6.1
// 위 항목 모두 traits: Set<Package.Dependency.Trait> 으로 조건 지정 가능
SwiftLanguageMode
case v6
case v5
case v4_2
case v4
case version(String)
Target
https://developer.apple.com/documentation/packagedescription/target
Target | Apple Developer Documentation
The basic building block of a Swift package.
developer.apple.com
Target은 빌드 단위로서 이 패키지에 포함될 모듈이나 실행파일, 테스트 모듈등이 된다.
소스파일의 경로와 빌드 관련 설정, 컴파일러을 위한 플러그인, 매크로 등을 정의한다.
target
별도의 path 설정이 없으면 Sources/target-name/ 하위의 소스코드를 빌드
.target(
name: String,
dependencies: [Target.Dependency],
// 파일 위치 관련 설정
path: String?,
exclude: [String],
sources: [String]?,
resources: [Resource]?
publicHeaderPath: String?,
// 컴파일 관련 설정
cSettings: [CSetting]?,
cxxSettings: [CXXSetting]?,
swiftSettings: [SwiftSetting]?,
linkerSettings: [LinkerSetting]?,
plugins: [Target.PluginUsage]?
)
path
설정하지 않으면 Sources/target-name 이 기본 소스 위치로 지정된다.
c/c++의 경우 헤더파일은 타겟 폴더의 include 로 지정된다. 변경하려면 cSettings, cxxSettings 에서 폴더를 지정.
// 타겟 소스 위치
MyPackage/Sources/MyLibrary
// c/c++ 타겟의 헤더 위치
MyPackage/Sources/CMyLibrary/include
Dependency
.product(
name: String,
package: String,
moduleAliases: [String: String]?,
condition: TargetDependencyCondition?
)
.target(
name: String,
condition: TargetDependencyCondition?
)
.byName(
name: String,
condition: TargetDependencyCondition?
)
Resource
.process(String, localization: Resource.Localization?)
.copy(String)
.embedInCode(String
process 는 번들 루트에 해당 리소스를 위치시키고, copy는 디렉토리 구조를 유지한채 번들링을 수행
CSetting, CXXSetting
.define(String, to: String?, BuildSettingCondition?)
.headerSeachPath(String, BuildSettingCondition?)
.unsafeFlags([String], BuildSettingCondition?)
.disableWarning(String, BuildSettingCondition?)
.enableWarning(String, BuildSettingCondition?)
.treatAllWarnings(as: WarningLevel, BuildSettingCondition?)
.treatWarning(String, as: WarningLevel, BuildSettingCondition?)
ex) 타겟내의 C 헤더 파일 위치를 변경하려면
cSettings: [
.headerSearchPath("MyPublicHeaders")
]
SwiftSetting
.define(String, BuildSettingCondition?)
.unsafeFlags([String], BuildSettingCondition?)
.strictMemorySafety(BuildSettingCondition?)
.swiftLanguageMode(SwiftLanguageMode, BuildSettingCondition?)
.defaultIsolation(MainActor.Type?, BuildSettingCondition?)
.enableExperimentalFeature(String, BuildSettingCondition?)
.enableUpcomingFeature(String, BuildSettingCondition?)
.interoperabilityMode(SwiftSetting.InteroperabilityMode, BuildSettingCondition?)
.treatAllWarnings(as: WarningLevel, BuildSettingCondition?)
.treatWarning(String, as: WarningLevel, BuildSettingCondition?)
executableTarget
실행 가능한 모듈
포함할 내용은 target과 동일
.executableTarget(
name: String,
dependencies: [Target.Dependency],
path: String?,
exclude: [String],
sources: [String]?,
resources: [Resource]?,
publicHeadersPath: String?,
packageAccess: Bool,
cSettings: [CSetting]?,
cxxSettings: [CXXSetting]?,
swiftSettings: [SwiftSetting]?,
linkerSettings: [LinkerSetting]?,
plugins: [Target.PluginUsage]?
)
plugin
플러그인은 path 가 지정되지 않으면 Plugins/plugin-name/ 의 소스 빌드
.plugin(
name: String,
capability: Target.PluginCapability,
dependencies: [Target.Dependency],
path: String?,
exclude: [String],
sources: [String]?,
packageAccess: Bool
)
PluginCapability
.buildTool()
.command(intent: PluginCommandIntent, permissions: [PluginPermission])
binaryTarget
이미 빌드되어있는 xcframework 같은 바이너리를 포함하는 경우
.binaryTarget(
name: String,
path: String
)
systemLibraryTarget
시스템에 설치된 라이브러리를 사용하는 경우
.systemLibrary(
name: String,
path: String?,
pkgConfig: String?,
providers:[SystemPackageProvider]?
)
Product
https://developer.apple.com/documentation/packagedescription/product
Product | Apple Developer Documentation
The object that defines a package product.
developer.apple.com
Product는 외부에서 사용 가능한 요소들을 정의한다.
libray
정적, 동적 라이브러리
.library(
name: String,
type: Product.Library.LibraryType?,
targets: [String]
)
LibraryType
case dynamic
case 'static'
executable
실행 도구
.executable(
name: String,
targets: [String]
)
plugin
빌드 프로세스에 실행되는 도구
.plugin(
name: String,
targets: [String]
)
'프로그래밍 > iOS,macOS' 카테고리의 다른 글
| [swift] swift에서 c함수호출시 void* 전달 (0) | 2025.10.26 |
|---|---|
| [swift] swift 라이브러리 c 코드에서 연동하기 (0) | 2025.10.18 |
| [swift] 커맨드라인 실행 파일 만들기(swift-argument-parser) (0) | 2025.10.16 |
| [swift] SCNProgram 쉐이더 투명 적용 (0) | 2024.10.31 |
| [swift] SceneKit uv animation (0) | 2024.08.22 |
| [swift] swiftui fileImpoter로 파일 선택하기 (0) | 2024.08.08 |
| [concurrency] Task, TaskGroup, task timeout (0) | 2023.02.28 |
| [swift] sorted array 에 값 추가 (0) | 2022.06.10 |
| [concurrency] swift async/await (0) | 2022.05.13 |
| [Combine] 콜백 기반 여러 처리 결과를 배열로 받기 (0) | 2022.03.20 |