diff --git a/README.md b/README.md index 1242aeb..af656d9 100644 --- a/README.md +++ b/README.md @@ -46,9 +46,9 @@ For more, please read the [wiki page](https://github.com/mssun/passforios/wiki). ## Building Pass for iOS -1. Install libtool, automake, cmake, carthage, cocoapods, and go: `brew install libtool automake cmake carthage cocoapods go@1.14 swiftlint swiftformat`. At the moment, the project does not build with current version of go (1.15). Use 1.14 -2. Install dependencies via Carthage in the project root directory: `./scripts/wcarthage update` then `./scripts/wcarthage bootstrap --platform iOS`. This may take some time. -3. Run `./scripts/gopenpgp_build.sh` to build go dependencies. +1. Install Libtool, Automake, CMake, Carthage, CocoaPods, Go, SwiftLint, and SwiftFormat: `brew install libtool automake cmake carthage cocoapods go swiftlint swiftformat`. +2. Install dependencies via Carthage. Therefore, execute `./scripts/wcarthage update` and `./scripts/wcarthage bootstrap --platform iOS` in the root directory of the project. This may take some time. +3. Run `./scripts/gopenpgp_build.sh` to build GopenPGP. 4. Install dependencies via CocoaPods in the project root directory: `pod install`. 5. Open the `pass.xcworkspace` file in Xcode. 6. Build & Run. diff --git a/pass.xcodeproj/project.pbxproj b/pass.xcodeproj/project.pbxproj index 6e535ff..b9f2e82 100644 --- a/pass.xcodeproj/project.pbxproj +++ b/pass.xcodeproj/project.pbxproj @@ -3,12 +3,12 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ - 116F7CC922E134FA003B3BAC /* Crypto.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 116F7CC822E134FA003B3BAC /* Crypto.framework */; }; - 116F7CCA22E134FA003B3BAC /* Crypto.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 116F7CC822E134FA003B3BAC /* Crypto.framework */; }; + 30052851267E9138003E2003 /* Gopenpgp.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 30052850267E9138003E2003 /* Gopenpgp.xcframework */; }; + 30052853267E914C003E2003 /* Gopenpgp.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 30052850267E9138003E2003 /* Gopenpgp.xcframework */; }; 300713C52219D54100F553AC /* AutoCellHeightUITableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 300713C42219D54100F553AC /* AutoCellHeightUITableViewController.swift */; }; 301F6463216162550071A4CE /* AdditionField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 301F6462216162550071A4CE /* AdditionField.swift */; }; 301F6468216165290071A4CE /* ConstantsTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 301F6467216165290071A4CE /* ConstantsTest.swift */; }; @@ -286,6 +286,8 @@ 116F7CC822E134FA003B3BAC /* Crypto.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Crypto.framework; path = go/dist/Crypto.framework; sourceTree = ""; }; 134DA5B66070BA56678688CF /* Pods_passKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_passKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 14E955B67C88672AA3A40BA0 /* Pods_passExtension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_passExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3005284A267E5FCF003E2003 /* Gopenpgp.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = Gopenpgp.xcframework; path = go/gopenpgp/dist/Gopenpgp.xcframework; sourceTree = ""; }; + 30052850267E9138003E2003 /* Gopenpgp.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = Gopenpgp.xcframework; path = go/dist/Gopenpgp.xcframework; sourceTree = ""; }; 300713C42219D54100F553AC /* AutoCellHeightUITableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoCellHeightUITableViewController.swift; sourceTree = ""; }; 301F6462216162550071A4CE /* AdditionField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdditionField.swift; sourceTree = ""; }; 301F6467216165290071A4CE /* ConstantsTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConstantsTest.swift; sourceTree = ""; }; @@ -506,7 +508,7 @@ buildActionMask = 2147483647; files = ( E813E400BBF3E7E8975EBAEF /* Pods_passKit.framework in Frameworks */, - 116F7CCA22E134FA003B3BAC /* Crypto.framework in Frameworks */, + 30052853267E914C003E2003 /* Gopenpgp.xcframework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -545,10 +547,10 @@ buildActionMask = 2147483647; files = ( A239F5902158C07D00576CBF /* AuthenticationServices.framework in Frameworks */, - 116F7CC922E134FA003B3BAC /* Crypto.framework in Frameworks */, A260758D1EEC6F34005DB03E /* passKit.framework in Frameworks */, DCC408C71E307DBB00F29B0E /* SVProgressHUD.framework in Frameworks */, 3EA2386CD0E9CE2A702A0B3E /* Pods_pass.framework in Frameworks */, + 30052851267E9138003E2003 /* Gopenpgp.xcframework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1023,6 +1025,8 @@ DC917BED1E2F38C4000FDF54 /* Frameworks */ = { isa = PBXGroup; children = ( + 3005284A267E5FCF003E2003 /* Gopenpgp.xcframework */, + 30052850267E9138003E2003 /* Gopenpgp.xcframework */, A239F58F2158C07D00576CBF /* AuthenticationServices.framework */, DCA671DE1E7A73B100D3ABE1 /* OneTimePassword.framework */, A262A58C1E68749C006B0890 /* Base32.framework */, @@ -1883,7 +1887,11 @@ GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = passShortcuts/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); MARKETING_VERSION = 0.12.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; @@ -1912,7 +1920,11 @@ GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = passShortcuts/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); MARKETING_VERSION = 0.12.0; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = me.mssun.passforios.shortcuts; @@ -1983,7 +1995,8 @@ PRODUCT_NAME = "Pass Beta"; SDKROOT = iphoneos; STRIP_INSTALLED_PRODUCT = NO; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; SWIFT_SWIFT3_OBJC_INFERENCE = Default; VALIDATE_PRODUCT = YES; WARNING_CFLAGS = "-Wno-incomplete-umbrella"; @@ -2011,7 +2024,10 @@ HEADER_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = pass/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); LIBRARY_SEARCH_PATHS = "$(inherited)"; MARKETING_VERSION = 0.12.0; OTHER_CFLAGS = "$(inherited)"; @@ -2037,7 +2053,11 @@ HEADER_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = passTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER).passTests"; PRODUCT_NAME = "$(TARGET_NAME)"; STRIP_INSTALLED_PRODUCT = NO; @@ -2063,7 +2083,11 @@ HEADER_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = passExtension/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); LIBRARY_SEARCH_PATHS = "$(inherited)"; MARKETING_VERSION = 0.12.0; OTHER_CFLAGS = "$(inherited)"; @@ -2135,7 +2159,11 @@ ); INFOPLIST_FILE = passKitTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER).passKitTests"; PRODUCT_NAME = "$(TARGET_NAME)"; STRIP_INSTALLED_PRODUCT = NO; @@ -2160,7 +2188,11 @@ GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = passAutoFillExtension/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); MARKETING_VERSION = 0.12.0; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = "me.mssun.passforiosbeta.auto-fill-credential-extension"; @@ -2189,7 +2221,11 @@ GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = passShortcuts/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); MARKETING_VERSION = 0.12.0; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = me.mssun.passforiosbeta.shortcuts; @@ -2217,7 +2253,11 @@ GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = passAutoFillExtension/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); MARKETING_VERSION = 0.12.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; @@ -2247,7 +2287,11 @@ GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = passAutoFillExtension/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); MARKETING_VERSION = 0.12.0; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = "me.mssun.passforios.auto-fill-credential-extension"; @@ -2362,7 +2406,11 @@ ); INFOPLIST_FILE = passKitTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER).passKitTests"; PRODUCT_NAME = "$(TARGET_NAME)"; STRIP_INSTALLED_PRODUCT = NO; @@ -2384,7 +2432,11 @@ ); INFOPLIST_FILE = passKitTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER).passKitTests"; PRODUCT_NAME = "$(TARGET_NAME)"; STRIP_INSTALLED_PRODUCT = NO; @@ -2410,7 +2462,11 @@ HEADER_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = passExtension/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); LIBRARY_SEARCH_PATHS = "$(inherited)"; MARKETING_VERSION = 0.12.0; OTHER_CFLAGS = "$(inherited)"; @@ -2442,7 +2498,11 @@ HEADER_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = passExtension/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); LIBRARY_SEARCH_PATHS = "$(inherited)"; MARKETING_VERSION = 0.12.0; OTHER_CFLAGS = "$(inherited)"; @@ -2467,7 +2527,11 @@ HEADER_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = passTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER).passTests"; PRODUCT_NAME = "$(TARGET_NAME)"; STRIP_INSTALLED_PRODUCT = NO; @@ -2486,7 +2550,11 @@ HEADER_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = passTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER).passTests"; PRODUCT_NAME = "$(TARGET_NAME)"; STRIP_INSTALLED_PRODUCT = NO; @@ -2625,7 +2693,8 @@ PRODUCT_NAME = Pass; SDKROOT = iphoneos; STRIP_INSTALLED_PRODUCT = NO; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; SWIFT_SWIFT3_OBJC_INFERENCE = Default; VALIDATE_PRODUCT = YES; WARNING_CFLAGS = "-Wno-incomplete-umbrella"; @@ -2653,7 +2722,10 @@ HEADER_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = pass/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); LIBRARY_SEARCH_PATHS = "$(inherited)"; MARKETING_VERSION = 0.12.0; OTHER_CFLAGS = "$(inherited)"; @@ -2690,7 +2762,10 @@ HEADER_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = pass/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); LIBRARY_SEARCH_PATHS = "$(inherited)"; MARKETING_VERSION = 0.12.0; OTHER_CFLAGS = "$(inherited)"; diff --git a/passKit/Crypto/GopenPGPInterface.swift b/passKit/Crypto/GopenPGPInterface.swift index b23efc3..a0f7b6a 100644 --- a/passKit/Crypto/GopenPGPInterface.swift +++ b/passKit/Crypto/GopenPGPInterface.swift @@ -6,12 +6,12 @@ // Copyright © 2019 Bob Sun. All rights reserved. // -import Crypto +import Gopenpgp struct GopenPGPInterface: PGPInterface { private static let errorMapping: [String: Error] = [ "gopenpgp: error in unlocking key: openpgp: invalid data: private key checksum failure": AppError.wrongPassphrase, - "openpgp: incorrect key": AppError.keyExpiredOrIncompatible, + "gopenpgp: error in reading message: openpgp: incorrect key": AppError.keyExpiredOrIncompatible, ] private var publicKeys: [String: CryptoKey] = [:] diff --git a/passKitTests/Crypto/CryptoFrameworkTest.swift b/passKitTests/Crypto/CryptoFrameworkTest.swift index e260d3c..8078c54 100644 --- a/passKitTests/Crypto/CryptoFrameworkTest.swift +++ b/passKitTests/Crypto/CryptoFrameworkTest.swift @@ -10,7 +10,7 @@ import XCTest // swiftformat:disable:next sortedImports @testable import passKit -@testable import Crypto +@testable import Gopenpgp class CryptoFrameworkTest: XCTestCase { private typealias MessageConverter = (CryptoPGPMessage, NSErrorPointer) -> CryptoPGPMessage? diff --git a/patch/gnu-dummy.patch b/patch/gnu-dummy.patch new file mode 100644 index 0000000..92725cc --- /dev/null +++ b/patch/gnu-dummy.patch @@ -0,0 +1,32 @@ +diff --git a/crypto/key.go b/crypto/key.go +index 49af11e..fd59ec4 100644 +--- a/crypto/key.go ++++ b/crypto/key.go +@@ -150,10 +150,12 @@ func (key *Key) Unlock(passphrase []byte) (*Key, error) { + return nil, err + } + +- err = unlockedKey.entity.PrivateKey.Decrypt(passphrase) +- if err != nil { +- return nil, errors.Wrap(err, "gopenpgp: error in unlocking key") +- } ++ if !unlockedKey.entity.PrivateKey.Dummy() { ++ err = unlockedKey.entity.PrivateKey.Decrypt(passphrase) ++ if err != nil { ++ return nil, errors.Wrap(err, "gopenpgp: error in unlocking key") ++ } ++ } + + for _, sub := range unlockedKey.entity.Subkeys { + if sub.PrivateKey != nil { +@@ -286,6 +288,10 @@ func (key *Key) IsLocked() (bool, error) { + } + } + ++ if key.entity.PrivateKey.Dummy() { ++ return true, nil ++ } ++ + return key.entity.PrivateKey.Encrypted, nil + } + diff --git a/scripts/gopenpgp_build.sh b/scripts/gopenpgp_build.sh index b4bd7cb..292b967 100755 --- a/scripts/gopenpgp_build.sh +++ b/scripts/gopenpgp_build.sh @@ -2,27 +2,29 @@ set -euox pipefail +GOPENPGP_VERSION="v2.1.10" + export GOPATH="$(pwd)/go" export PATH="$PATH:$GOPATH/bin" -PACKAGE_PATH="github.com/mssun/gopenpgp" -GOPENPGP_REVISION="gnu-dummy" -OUTPUT_PATH="$GOPATH/dist" - -mkdir -p "$GOPATH" - -go get golang.org/x/mobile/cmd/gomobile || true -( cd "$GOPATH/src/golang.org/x/mobile/cmd/gomobile" && git checkout 0df4eb2385467a487d418c6358313e9e838256ae ) -GO111MODULE=on go get golang.org/x/mobile/cmd/gomobile@0df4eb2385467a487d418c6358313e9e838256ae || true -GO111MODULE=on go get golang.org/x/mobile/cmd/gobind@0df4eb2385467a487d418c6358313e9e838256ae || true -go get -u "$PACKAGE_PATH" || true - -mkdir -p "$GOPATH/src/github.com/ProtonMail" -ln -f -s "$GOPATH/src/$PACKAGE_PATH" "$GOPATH/src/github.com/ProtonMail/gopenpgp" - -( cd "$GOPATH/src/$PACKAGE_PATH" && git checkout "$GOPENPGP_REVISION" && GO111MODULE=on go mod vendor ) +OUTPUT_PATH="go/dist" +CHECKOUT_PATH="go/checkout" +GOPENPGP_PATH="$CHECKOUT_PATH/gopenpgp" mkdir -p "$OUTPUT_PATH" +mkdir -p "$CHECKOUT_PATH" + +go env -w GO111MODULE=auto +go get golang.org/x/mobile/cmd/gomobile +gomobile init + +git clone --depth 1 --branch "$GOPENPGP_VERSION" git@github.com:ProtonMail/gopenpgp.git "$GOPENPGP_PATH" + +git apply patch/gnu-dummy.patch --directory "$GOPENPGP_PATH" + +sed -i '' 's/build android/echo "Skipping Android build."/g' "$GOPENPGP_PATH/build.sh" + +(cd "$GOPENPGP_PATH" && ./build.sh) + +cp -R "$GOPENPGP_PATH/dist/Gopenpgp.xcframework" "$OUTPUT_PATH" -"$GOPATH/bin/gomobile" bind -v -ldflags="-s -w" -target ios -o "${OUTPUT_PATH}/Crypto.framework" \ - "$PACKAGE_PATH"/{crypto,armor,constants,models,subtle}