diff --git a/.github/workflows/pr-build-and-test.yml b/.github/workflows/pr-build-and-test.yml new file mode 100644 index 000000000..54116674a --- /dev/null +++ b/.github/workflows/pr-build-and-test.yml @@ -0,0 +1,48 @@ +name: PR Build & Test + +on: + pull_request: + branches: [develop] + +# 같은 PR에 새 커밋이 올라오면 이전 실행은 취소 +concurrency: + group: pr-build-and-test-${{ github.event.pull_request.number }} + cancel-in-progress: true + +# 코드를 읽기만 하면 되므로 최소 권한만 부여 +permissions: + contents: read + +jobs: + # fork에서 올린 PR에는 Secrets가 전달되지 않아 실행되지 않음 (같은 레포 브랜치 PR만 지원) + unit-test: + runs-on: macos-26 + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + + - name: Secrets 복원 + env: + DEBUG_XCCONFIG: ${{ secrets.DEBUG_XCCONFIG }} + GOOGLE_SERVICE_STAGE_PLIST: ${{ secrets.GOOGLE_SERVICE_STAGE_PLIST }} + run: | + # xcconfig만 있는 폴더라 클론 시 존재하지 않음 + mkdir -p Koin/Core/Configuration + echo "$DEBUG_XCCONFIG" | base64 --decode > Koin/Core/Configuration/Debug.xcconfig + echo "$GOOGLE_SERVICE_STAGE_PLIST" | base64 --decode > GoogleService-Info-Stage.plist + + - name: Xcode 버전 고정 + run: sudo xcode-select -s /Applications/Xcode_26.4.1.app + + - name: SPM 캐시 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + with: + path: SourcePackages + key: spm-${{ hashFiles('koin.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved') }} + + - name: 빌드 & 테스트 + run: | + xcodebuild test \ + -project koin.xcodeproj \ + -scheme koin-stage \ + -destination 'platform=iOS Simulator,name=iPhone 17 Pro,OS=latest' \ + -clonedSourcePackagesDirPath SourcePackages diff --git a/.gitignore b/.gitignore index 452381ef0..4eedef04c 100644 --- a/.gitignore +++ b/.gitignore @@ -111,12 +111,6 @@ iOSInjectionProject/ .DS_Store *.xcuserstate *.xcconfig -xcuserdata/ -DerivedData/ koin.xcworkspace/ -xcshareddata/xcschemes/* -xcuserdata/* -Pods/ -project.xcworkspace/ GoogleService-Info.plist -GoogleService-Info-Stage.plist \ No newline at end of file +GoogleService-Info-Stage.plist diff --git a/koin.xcodeproj/project.pbxproj b/koin.xcodeproj/project.pbxproj index 58363302c..e4f130a92 100644 --- a/koin.xcodeproj/project.pbxproj +++ b/koin.xcodeproj/project.pbxproj @@ -783,8 +783,6 @@ B68D2CE72EA505B000F3B479 /* ToastMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B68D2CE62EA505B000F3B479 /* ToastMessageView.swift */; }; B68D2CE92EA505B800F3B479 /* ToastVariant.swift in Sources */ = {isa = PBXBuildFile; fileRef = B68D2CE82EA505B800F3B479 /* ToastVariant.swift */; }; B68D2CEB2EA50C1E00F3B479 /* UIViewController+Toast.swift in Sources */ = {isa = PBXBuildFile; fileRef = B68D2CEA2EA50C1E00F3B479 /* UIViewController+Toast.swift */; }; - B6A0D62A2EEB01E600A19521 /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = B6A0D6292EEB01E600A19521 /* Debug.xcconfig */; }; - B6A0D62C2EEB01F100A19521 /* Release.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = B6A0D62B2EEB01F100A19521 /* Release.xcconfig */; }; D0A71C4F2F1B8340009E2D71 /* KoinDropdownHost.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A71C4E2F1B8340009E2D71 /* KoinDropdownHost.swift */; }; D19A00013000000000000002 /* NotificationRowModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D19A00013000000000000001 /* NotificationRowModel.swift */; }; D19A00013000000000000004 /* NotificationListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D19A00013000000000000003 /* NotificationListView.swift */; }; @@ -5831,10 +5829,8 @@ D27DD0B22BA608310081FD36 /* Assets.xcassets in Resources */, 83D5E9C82CCB844D00C6D4CD /* (null) in Resources */, 83D5E9C82CCB844D00C6D4CD /* (null) in Resources */, - B6A0D62A2EEB01E600A19521 /* Debug.xcconfig in Resources */, D261BBAB2D7B456A00A67F06 /* PrivacyInfo.xcprivacy in Resources */, D8F5C5562E6F144300FB6708 /* floatingLogo.json in Resources */, - B6A0D62C2EEB01F100A19521 /* Release.xcconfig in Resources */, D80AD4E42E6C6BC30061334B /* waveLogo.json in Resources */, 7C50F8DC300FC03B00A87BAE /* AppIcon.icon in Resources */, ); diff --git a/koin.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/koin.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..0c055514e --- /dev/null +++ b/koin.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/koin.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/koin.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 000000000..d6c56a9c3 --- /dev/null +++ b/koin.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,231 @@ +{ + "originHash" : "b0349f547cd95f1cb8895eaa644928c7770e7efae0cdb9491ee6d5f1c68d0e72", + "pins" : [ + { + "identity" : "abseil-cpp-binary", + "kind" : "remoteSourceControl", + "location" : "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/google/abseil-cpp-binary.git", + "state" : { + "revision" : "bbe8b69694d7873315fd3a4ad41efe043e1c07c5", + "version" : "1.2024072200.0" + } + }, + { + "identity" : "alamofire", + "kind" : "remoteSourceControl", + "location" : "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/Alamofire/Alamofire", + "state" : { + "revision" : "7595cbcf59809f9977c5f6378500de2ad73b7ddb", + "version" : "5.12.0" + } + }, + { + "identity" : "app-check", + "kind" : "remoteSourceControl", + "location" : "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/google/app-check.git", + "state" : { + "revision" : "61b85103a1aeed8218f17c794687781505fbbef5", + "version" : "11.2.0" + } + }, + { + "identity" : "cosmos", + "kind" : "remoteSourceControl", + "location" : "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/evgenyneu/Cosmos.git", + "state" : { + "revision" : "40ba10aaf175bf50abefd0e518bd3b40862af3b1", + "version" : "25.0.1" + } + }, + { + "identity" : "firebase-ios-sdk", + "kind" : "remoteSourceControl", + "location" : "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/firebase/firebase-ios-sdk", + "state" : { + "revision" : "8d5b4189f1f482df8d5c58c9985ea70491ef5382", + "version" : "12.14.0" + } + }, + { + "identity" : "google-ads-on-device-conversion-ios-sdk", + "kind" : "remoteSourceControl", + "location" : "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/googleads/google-ads-on-device-conversion-ios-sdk", + "state" : { + "revision" : "9bfcc6cf435b2e7c5562c1900b8680c594fa9a64", + "version" : "3.6.0" + } + }, + { + "identity" : "googleappmeasurement", + "kind" : "remoteSourceControl", + "location" : "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/google/GoogleAppMeasurement.git", + "state" : { + "revision" : "219e564a8510e983e675c94f77f7f7c50049f22d", + "version" : "12.14.0" + } + }, + { + "identity" : "googledatatransport", + "kind" : "remoteSourceControl", + "location" : "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/google/GoogleDataTransport.git", + "state" : { + "revision" : "617af071af9aa1d6a091d59a202910ac482128f9", + "version" : "10.1.0" + } + }, + { + "identity" : "googleutilities", + "kind" : "remoteSourceControl", + "location" : "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/google/GoogleUtilities.git", + "state" : { + "revision" : "60da361632d0de02786f709bdc0c4df340f7613e", + "version" : "8.1.0" + } + }, + { + "identity" : "grpc-binary", + "kind" : "remoteSourceControl", + "location" : "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/google/grpc-binary.git", + "state" : { + "revision" : "75b31c842f664a0f46a2e590a570e370249fd8f6", + "version" : "1.69.1" + } + }, + { + "identity" : "gtm-session-fetcher", + "kind" : "remoteSourceControl", + "location" : "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/google/gtm-session-fetcher.git", + "state" : { + "revision" : "c0ac7575d70050c2973ba2318bd5af47f8e8153a", + "version" : "5.3.0" + } + }, + { + "identity" : "interop-ios-for-google-sdks", + "kind" : "remoteSourceControl", + "location" : "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/google/interop-ios-for-google-sdks.git", + "state" : { + "revision" : "040d087ac2267d2ddd4cca36c757d1c6a05fdbfe", + "version" : "101.0.0" + } + }, + { + "identity" : "kakao-ios-sdk", + "kind" : "remoteSourceControl", + "location" : "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/kakao/kakao-ios-sdk", + "state" : { + "revision" : "32626459f03d9a3622f91cfc001c6dc97cae33a9", + "version" : "2.27.3" + } + }, + { + "identity" : "kingfisher", + "kind" : "remoteSourceControl", + "location" : "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/onevcat/Kingfisher.git", + "state" : { + "revision" : "cf8be20d07654570554c8a8a4952bc8a5766a8b0", + "version" : "8.9.0" + } + }, + { + "identity" : "leveldb", + "kind" : "remoteSourceControl", + "location" : "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/firebase/leveldb.git", + "state" : { + "revision" : "a0bc79961d7be727d258d33d5a6b2f1023270ba1", + "version" : "1.22.5" + } + }, + { + "identity" : "lottie-spm", + "kind" : "remoteSourceControl", + "location" : "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/airbnb/lottie-spm", + "state" : { + "revision" : "69faaefa7721fba9e434a52c16adf4329c9084db", + "version" : "4.6.0" + } + }, + { + "identity" : "nanopb", + "kind" : "remoteSourceControl", + "location" : "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/firebase/nanopb.git", + "state" : { + "revision" : "b7e1104502eca3a213b46303391ca4d3bc8ddec1", + "version" : "2.30910.0" + } + }, + { + "identity" : "promises", + "kind" : "remoteSourceControl", + "location" : "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/google/promises.git", + "state" : { + "revision" : "540318ecedd63d883069ae7f1ed811a2df00b6ac", + "version" : "2.4.0" + } + }, + { + "identity" : "rxswift", + "kind" : "remoteSourceControl", + "location" : "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/ReactiveX/RxSwift.git", + "state" : { + "revision" : "132aea4f236ccadc51590b38af0357a331d51fa2", + "version" : "6.10.2" + } + }, + { + "identity" : "snapkit", + "kind" : "remoteSourceControl", + "location" : "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/SnapKit/SnapKit", + "state" : { + "revision" : "2842e6e84e82eb9a8dac0100ca90d9444b0307f4", + "version" : "5.7.1" + } + }, + { + "identity" : "spm-nmapsgeometry", + "kind" : "remoteSourceControl", + "location" : "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/navermaps/SPM-NMapsGeometry.git", + "state" : { + "revision" : "436d5e2e684f557faf5ef5862fd6633a42d7af11", + "version" : "1.0.2" + } + }, + { + "identity" : "spm-nmapsmap", + "kind" : "remoteSourceControl", + "location" : "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/navermaps/SPM-NMapsMap", + "state" : { + "revision" : "d527147b0bf31260166a7063e3ed854a03f8239c", + "version" : "3.23.2" + } + }, + { + "identity" : "swiftrater", + "kind" : "remoteSourceControl", + "location" : "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/takecian/SwiftRater.git", + "state" : { + "revision" : "a4241b31f35fd4c98a901ecd336f47337d2aba5d", + "version" : "2.2.3" + } + }, + { + "identity" : "swiftsoup", + "kind" : "remoteSourceControl", + "location" : "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/scinfu/SwiftSoup.git", + "state" : { + "revision" : "49dcadd93161f4a44b4994d3a3e8de9f085aface", + "version" : "2.13.5" + } + }, + { + "identity" : "then", + "kind" : "remoteSourceControl", + "location" : "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/devxoul/Then", + "state" : { + "revision" : "d41ef523faef0f911369f79c0b96815d9dbb6d7a", + "version" : "3.0.0" + } + } + ], + "version" : 3 +}