ぜのぜ

しりとりしようぜのぜのぜのぜ

312日目

現象

BuildTools/Package.swiftがこうで、

// swift-tools-version:5.1
import PackageDescription

let package = Package(
    name: "BuildTools",
    platforms: [.macOS(.v10_11)],
    dependencies: [
        .package(url: "https://github.com/nicklockwood/SwiftFormat", from: "0.49.0"),
        .package(url: "https://github.com/uber/mockolo.git", from: "1.1.2"),
    ],
    targets: [.target(name: "BuildTools", path: "")]
)

Build Phaseにこれを追加するとコケる。

swift run -c release --package-path BuildTools mockolo -s "$SRCROOT" -d Mocks.swift

エラーはこれ。

'buildtools': error: invalidManifestFormat("<unknown>:0: warning: using sysroot for \'iPhoneSimulator\' but targeting \'MacOSX\'\n<unknown>:0: error: unable to load standard library for target \'x86_64-apple-macosx11.0\'", diagnosticFile: nil)

原因

原因はこれで、

macOS 向けにビルドしようとしているのに、利用するSDKiOSシミュレーター用になっているため XcodeのBuild Phasesでmintを実行する時の注意点 - Qiita

"macOS向けに"というのはBuildTools/Package.swiftのこの部分?

    platforms: [.macOS(.v10_11)],

と思って.iOS(.v13)に変えてみたけど同じだったのでこっちかな。

// https://github.com/uber/mockolo/blob/0a714a24f74a2dd5f7db9826f5e3c56a729d2622/Package.swift#L24
    platforms: [
        .macOS(.v10_15),
    ],

ほげ

Build Phaseのスクリプトを変更すればいい。

# before
# swift run -c release --package-path BuildTools mockolo -s "$SRCROOT" -d Mocks.swift
xcrun --sdk macosx swift run -c release --package-path BuildTools mockolo -s "$SRCROOT" -d Mocks.swift

xcrunは何者かというのと、swiftにも--sdkオプションがあるけどそれだと動かないのは宿題*1ということで。後者はエラーを見る限り適当なパスを指定すれば動く気がする。

*1:いいリンクがあればほしいっす