diff --git a/.github/workflows/Build.yml b/.github/workflows/Build.yml new file mode 100644 index 000000000..ff1fa8d34 --- /dev/null +++ b/.github/workflows/Build.yml @@ -0,0 +1,62 @@ +name: Build + +on: push + +jobs: + build: + runs-on: macos-13 + + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Cancel Previous Runs + uses: styfle/cancel-workflow-action@0.9.1 + with: + access_token: ${{ github.token }} + + - name: Set Xcode Version + run: | + sudo xcode-select -switch /Applications/Xcode_15.2.app + + - name: Display Xcode Version + run: /usr/bin/xcodebuild -version + + - name: Cache DerivedData + uses: actions/cache@v2 + with: + path: | + DerivedData + key: ${{ runner.os }}-derived-data-${{ hashFiles('**/*.xcworkspace') }} + restore-keys: | + ${{ runner.os }}-derived-data- + + - name: Cache CocoaPods + uses: actions/cache@v2 + with: + path: | + Pods + key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }} + restore-keys: | + ${{ runner.os }}-pods- + + - name: Install CocoaPods + run: | + if [ -f "Podfile.lock" ] && [ -f "${{ runner.workspace }}/Podfile.lock" ] && cmp -s Podfile.lock "${{ runner.workspace }}/Podfile.lock"; then + echo "Podfile.lock unchanged. Skipping pod installs." + else + gem install cocoapods + pod install --repo-update + fi + + - name: Run SwiftLint + run: | + if git diff --name-only ${{ github.sha }} | grep -q '\.swift$'; then + Pods/SwiftLint/swiftlint Splito + else + echo "No Swift files changed. Skipping SwiftLint." + fi + + - name: Build Project + run: | + xcodebuild -workspace Splito.xcworkspace -scheme "Splito" clean build -sdk iphoneos CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED="NO" -destination generic/platform=iOS OTHER_CFLAGS="-Wno-deprecated-builtins" | xcpretty --color diff --git a/.github/workflows/Deploy.yml b/.github/workflows/Deploy.yml new file mode 100644 index 000000000..b359e663c --- /dev/null +++ b/.github/workflows/Deploy.yml @@ -0,0 +1,101 @@ +name: Deploy + +on: + push: + branches: + - main + +jobs: + deploy: + runs-on: macos-13 + + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Cancel Previous Runs + uses: styfle/cancel-workflow-action@0.9.1 + with: + access_token: ${{ github.token }} + + - name: Set Xcode Version + run: | + sudo xcode-select -switch /Applications/Xcode_15.2.app + + - name: Display Xcode Version + run: /usr/bin/xcodebuild -version + + # - name: Install Apple Certificate and Provisioning Profile + # run: | + # chmod +x install_dist_certs.sh && ./install_dist_certs.sh + # chmod +x install_dist_profile.sh && ./install_dist_profile.sh + + # - name: Cache DerivedData + # uses: actions/cache@v2 + # with: + # path: | + # DerivedData + # key: ${{ runner.os }}-derived-data-${{ hashFiles('**/*.xcworkspace') }} + # restore-keys: | + # ${{ runner.os }}-derived-data- + + # - name: Cache CocoaPods + # uses: actions/cache@v2 + # with: + # path: | + # Pods + # key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }} + # restore-keys: | + # ${{ runner.os }}-pods- + + # - name: Install CocoaPods + # run: | + # if [ -f "Podfile.lock" ] && [ -f "${{ runner.workspace }}/Podfile.lock" ] && cmp -s Podfile.lock "${{ runner.workspace }}/Podfile.lock"; then + # echo "Podfile.lock unchanged. Skipping pod installs." + # else + # gem install cocoapods + # pod install --repo-update + # fi + + # - name: Run SwiftLint + # run: | + # if git diff --name-only ${{ github.sha }} | grep -q '\.swift$'; then + # Pods/SwiftLint/swiftlint Splito + # else + # echo "No Swift files changed. Skipping SwiftLint." + # fi + + # - name: Get Build Version + # run: | + # file='Splito/VERSION' + # fileData=`cat $file` + # IFS='.' + # read -a versionValue <<< "$fileData" + # buildNumber=$(expr `expr ${versionValue[0]} \* 1000000` + `expr ${versionValue[1]} \* 10000` + ${CI_PIPELINE_IID}) + # IFS='' + # buildName="${versionValue[0]}.${versionValue[1]}.$CI_PIPELINE_IID" + # echo "Uploading build $buildName" + + # - name: Build and Archive Project + # run: | + # ARCHIVE_PATH="$HOME/Library/Developer/Xcode/Archives/Splito/${CI_COMMIT_SHA}/${CI_JOB_ID}.xcarchive" + # xcodebuild app_version_code=${buildNumber} app_version_name=${buildName} -workspace Splito.xcworkspace -scheme "Splito" clean archive -sdk iphoneos -archivePath $ARCHIVE_PATH | xcpretty --color + + # - name: Export Archive + # run: | + # EXPORT_PATH="$HOME/Library/Developer/Xcode/Archives/Splito/${CI_COMMIT_SHA}/${CI_JOB_ID}" + # xcodebuild -exportArchive -archivePath $ARCHIVE_PATH -exportPath $EXPORT_PATH -exportOptionsPlist ExportOptions.plist | xcpretty --color + + # - name: Store IPA + # run: | + # echo "Collecting artifacts.." + # cp -R "${ARCHIVE_PATH}/dSYMs" . + # IPA="${EXPORT_PATH}Splito.ipa" + # echo $IPA + + # - name: Deploy to App Store Connect + # run: | + # rm -rf $ARCHIVE_PATH + # rm -rf $EXPORT_PATH + # echo "Uploading app to iTC..." + # xcrun altool --upload-app -t ios -f $IPA -u $ITC_USER_NAME -p $ITC_USER_PASSWORD diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 85585cca9..000000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,28 +0,0 @@ -name: CI - -on: - push: - branches: [ "main" ] - pull_request: - branches: [ "main" ] - - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: - -jobs: - build: - runs-on: ubuntu-latest - - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - # Runs a single command using the runner's shell - - name: Run a one-line script - run: echo Hello, world! - - # Runs a set of commands using the runner's shell - - name: Run a multi-line script - run: | - echo Add other actions to build, - echo test, and deploy your project. diff --git a/BaseStyle/BaseStyle.xcodeproj/project.pbxproj b/BaseStyle/BaseStyle.xcodeproj/project.pbxproj index 608d4bdc8..205f04124 100644 --- a/BaseStyle/BaseStyle.xcodeproj/project.pbxproj +++ b/BaseStyle/BaseStyle.xcodeproj/project.pbxproj @@ -306,8 +306,8 @@ buildPhases = ( 15E144B950823D0362E9BB2B /* [CP] Check Pods Manifest.lock */, D8D42A382B85CC85009B345D /* Headers */, - D8D42A882B85D322009B345D /* Swiftlint */, D8D42A392B85CC85009B345D /* Sources */, + D8D42A882B85D322009B345D /* Swiftlint */, D8D42A3A2B85CC85009B345D /* Frameworks */, D8D42A3B2B85CC85009B345D /* Resources */, ); @@ -456,6 +456,7 @@ }; D8D42A882B85D322009B345D /* Swiftlint */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -651,10 +652,10 @@ baseConfigurationReference = E0B1A6930B9FF35E9142463B /* Pods-BaseStyle.debug.xcconfig */; buildSettings = { CLANG_ENABLE_MODULES = YES; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = S985H2T7J8; + DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -675,6 +676,7 @@ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; PRODUCT_BUNDLE_IDENTIFIER = com.canopas.splito.BaseStyle; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SKIP_INSTALL = YES; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -688,10 +690,10 @@ baseConfigurationReference = 2CE85328C46B183FC3F074A3 /* Pods-BaseStyle.release.xcconfig */; buildSettings = { CLANG_ENABLE_MODULES = YES; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = S985H2T7J8; + DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -712,6 +714,7 @@ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; PRODUCT_BUNDLE_IDENTIFIER = com.canopas.splito.BaseStyle; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SKIP_INSTALL = YES; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; diff --git a/Data/.swiftlint.yml b/Data/.swiftlint.yml new file mode 100644 index 000000000..9a85183e2 --- /dev/null +++ b/Data/.swiftlint.yml @@ -0,0 +1,15 @@ +disabled_rules: # rule identifiers to exclude from running + - nesting + - type_name + - force_cast + - line_length + - large_tuple + - identifier_name + - type_body_length + - function_body_length + - orphaned_doc_comment + - void_function_in_ternary + +file_length: + warning: 400 + error: 500 diff --git a/Data/Data.xcodeproj/project.pbxproj b/Data/Data.xcodeproj/project.pbxproj index 4dc706324..b3f69dac9 100644 --- a/Data/Data.xcodeproj/project.pbxproj +++ b/Data/Data.xcodeproj/project.pbxproj @@ -25,7 +25,6 @@ D8AC25C32B7F390B00CEAAD3 /* AppAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8AC25C22B7F390B00CEAAD3 /* AppAssembly.swift */; }; D8D42A9B2B8709FD009B345D /* BaseViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8D42A9A2B8709FD009B345D /* BaseViewModel.swift */; }; D8D42A9F2B870BBA009B345D /* BaseStyle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8D42A9E2B870BBA009B345D /* BaseStyle.framework */; }; - D8D42AA02B870BBA009B345D /* BaseStyle.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D8D42A9E2B870BBA009B345D /* BaseStyle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; D8D42AA92B872726009B345D /* DDLogProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8D42AA82B872726009B345D /* DDLogProvider.swift */; }; D8DF8BBF2B7A315100165138 /* Data.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8DF8BB62B7A315000165138 /* Data.framework */; }; D8DF8BC42B7A315100165138 /* DataTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8DF8BC32B7A315100165138 /* DataTests.swift */; }; @@ -42,20 +41,6 @@ }; /* End PBXContainerItemProxy section */ -/* Begin PBXCopyFilesBuildPhase section */ - D8D42AA12B870BBA009B345D /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - D8D42AA02B870BBA009B345D /* BaseStyle.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - /* Begin PBXFileReference section */ 1571EA0A08D442FEF7C09424 /* Pods_DataTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_DataTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 5B14CF1A2EEF27479BF50566 /* Pods-DataTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DataTests.debug.xcconfig"; path = "Target Support Files/Pods-DataTests/Pods-DataTests.debug.xcconfig"; sourceTree = ""; }; @@ -283,9 +268,9 @@ 927C69B32FF9F96F90F46B00 /* [CP] Check Pods Manifest.lock */, D8DF8BB12B7A315000165138 /* Headers */, D8DF8BB22B7A315000165138 /* Sources */, + D863857F2B91DBF000A8C6EB /* Swiftlint */, D8DF8BB32B7A315000165138 /* Frameworks */, D8DF8BB42B7A315000165138 /* Resources */, - D8D42AA12B870BBA009B345D /* Embed Frameworks */, ); buildRules = ( ); @@ -415,6 +400,25 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + D863857F2B91DBF000A8C6EB /* Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = Swiftlint; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"${PODS_ROOT}/SwiftLint/swiftlint\" --fix Data\n\"${PODS_ROOT}/SwiftLint/swiftlint\" Data\n"; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -590,14 +594,15 @@ baseConfigurationReference = BED6C37AA3F8FD2A6350DE1C /* Pods-Data.debug.xcconfig */; buildSettings = { CLANG_ENABLE_MODULES = YES; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = S985H2T7J8; + DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_MODULE_VERIFIER = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSHumanReadableCopyright = ""; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -610,8 +615,70 @@ MARKETING_VERSION = 1.0; MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-framework", + "\"AppAuth\"", + "-framework", + "\"CocoaLumberjack\"", + "-framework", + "\"CoreGraphics\"", + "-framework", + "\"CoreText\"", + "-framework", + "\"FBLPromises\"", + "-framework", + "\"FirebaseAppCheckInterop\"", + "-framework", + "\"FirebaseAuth\"", + "-framework", + "\"FirebaseCore\"", + "-framework", + "\"FirebaseCoreExtension\"", + "-framework", + "\"FirebaseCoreInternal\"", + "-framework", + "\"FirebaseFirestore\"", + "-framework", + "\"FirebaseFirestoreInternal\"", + "-framework", + "\"FirebaseSharedSwift\"", + "-framework", + "\"Foundation\"", + "-framework", + "\"GTMAppAuth\"", + "-framework", + "\"GTMSessionFetcher\"", + "-framework", + "\"GoogleSignIn\"", + "-framework", + "\"GoogleUtilities\"", + "-framework", + "\"LocalAuthentication\"", + "-framework", + "\"RecaptchaInterop\"", + "-framework", + "\"SSZipArchive\"", + "-framework", + "\"SafariServices\"", + "-framework", + "\"Security\"", + "-framework", + "\"Swinject\"", + "-framework", + "\"SystemConfiguration\"", + "-framework", + "\"UIKit\"", + "-framework", + "\"openssl_grpc\"", + "-weak_framework", + "\"AuthenticationServices\"", + "-Wl", + "-Wno-deprecated-declarations", + ); PRODUCT_BUNDLE_IDENTIFIER = com.canopas.splito.Data; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SKIP_INSTALL = YES; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -625,14 +692,15 @@ baseConfigurationReference = E03ED35E1B582FED247ACC38 /* Pods-Data.release.xcconfig */; buildSettings = { CLANG_ENABLE_MODULES = YES; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = S985H2T7J8; + DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_MODULE_VERIFIER = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSHumanReadableCopyright = ""; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -645,8 +713,70 @@ MARKETING_VERSION = 1.0; MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-framework", + "\"AppAuth\"", + "-framework", + "\"CocoaLumberjack\"", + "-framework", + "\"CoreGraphics\"", + "-framework", + "\"CoreText\"", + "-framework", + "\"FBLPromises\"", + "-framework", + "\"FirebaseAppCheckInterop\"", + "-framework", + "\"FirebaseAuth\"", + "-framework", + "\"FirebaseCore\"", + "-framework", + "\"FirebaseCoreExtension\"", + "-framework", + "\"FirebaseCoreInternal\"", + "-framework", + "\"FirebaseFirestore\"", + "-framework", + "\"FirebaseFirestoreInternal\"", + "-framework", + "\"FirebaseSharedSwift\"", + "-framework", + "\"Foundation\"", + "-framework", + "\"GTMAppAuth\"", + "-framework", + "\"GTMSessionFetcher\"", + "-framework", + "\"GoogleSignIn\"", + "-framework", + "\"GoogleUtilities\"", + "-framework", + "\"LocalAuthentication\"", + "-framework", + "\"RecaptchaInterop\"", + "-framework", + "\"SSZipArchive\"", + "-framework", + "\"SafariServices\"", + "-framework", + "\"Security\"", + "-framework", + "\"Swinject\"", + "-framework", + "\"SystemConfiguration\"", + "-framework", + "\"UIKit\"", + "-framework", + "\"openssl_grpc\"", + "-weak_framework", + "\"AuthenticationServices\"", + "-Wl", + "-Wno-deprecated-declarations", + ); PRODUCT_BUNDLE_IDENTIFIER = com.canopas.splito.Data; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SKIP_INSTALL = YES; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; diff --git a/Data/Data/DI/AppAssembly.swift b/Data/Data/DI/AppAssembly.swift index fe7da4636..b113c8791 100644 --- a/Data/Data/DI/AppAssembly.swift +++ b/Data/Data/DI/AppAssembly.swift @@ -9,27 +9,27 @@ import Foundation import Swinject public class AppAssembly: Assembly { - + public init() { } - + public func assemble(container: Container) { - + container.register(Router.self) { _ in .init(root: .Onboard) }.inObjectScope(.container) - + container.register(Router.self) { _ in .init(root: .Home) }.inObjectScope(.container) - + container.register(SplitoPreference.self) { _ in SplitoPreference.init() }.inObjectScope(.container) - + container.register(DDLoggerProvider.self) { _ in DDLoggerProvider.init() }.inObjectScope(.container) - + container.register(FirestoreManager.self) { _ in FirestoreManager.init() }.inObjectScope(.container) diff --git a/Data/Data/Helper/Logger/DDLogProvider.swift b/Data/Data/Helper/Logger/DDLogProvider.swift index fcfdba18a..00f47c701 100644 --- a/Data/Data/Helper/Logger/DDLogProvider.swift +++ b/Data/Data/Helper/Logger/DDLogProvider.swift @@ -9,9 +9,9 @@ import CocoaLumberjack import SSZipArchive public class DDLoggerProvider { - + public init() { } - + public func provideLogger() -> DDFileLogger { return DDFileLogger() } @@ -46,20 +46,20 @@ public func addDDLoggers() { } public extension DDFileLogger { - + func zipLogs() -> URL { removeAllZipLogs() createZipDirectory() - + let df = DateFormatter() df.dateFormat = "yyyy-MM-dd-hh-mm a" - + let now = df.string(from: Date()) let destination = FileManager.default.temporaryDirectory.appendingPathComponent("Logs/\(now).zip") SSZipArchive.createZipFile(atPath: destination.path, withContentsOfDirectory: self.logFileManager.logsDirectory) return destination } - + func createZipDirectory() { let path = NSTemporaryDirectory() + "/Logs" if !FileManager.default.fileExists(atPath: path) { @@ -70,19 +70,17 @@ public extension DDFileLogger { } } } - + func removeAllZipLogs() { let fileManager = FileManager.default - + let logsDir = fileManager.temporaryDirectory.appendingPathComponent("Logs") do { let fileURLs = try fileManager.contentsOfDirectory(at: logsDir, includingPropertiesForKeys: nil, options: [.skipsHiddenFiles, .skipsSubdirectoryDescendants]) - for fileURL in fileURLs { - if fileURL.pathExtension == "zip" { - try FileManager.default.removeItem(at: fileURL) - } + for fileURL in fileURLs where fileURL.pathExtension == "zip" { + try FileManager.default.removeItem(at: fileURL) } } catch { LogE("DDFileLogger: remove all zip error \(error)") diff --git a/Data/Data/Helper/NonceGenerator.swift b/Data/Data/Helper/NonceGenerator.swift index 6074dec83..4f8a3ae27 100644 --- a/Data/Data/Helper/NonceGenerator.swift +++ b/Data/Data/Helper/NonceGenerator.swift @@ -9,15 +9,15 @@ import Foundation import CryptoKit public class NonceGenerator { - + static public func randomNonceString(length: Int = 32) -> String { - + var result = "" var remainingLength = length let charset: [Character] = Array("0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz-._") - + precondition(length > 0) - + while remainingLength > 0 { let randoms: [UInt8] = (0 ..< 16).map { _ in var random: UInt8 = 0 @@ -27,12 +27,12 @@ public class NonceGenerator { } return random } - + randoms.forEach { random in if remainingLength == 0 { return } - + if random < charset.count { result.append(charset[Int(random)]) remainingLength -= 1 @@ -41,7 +41,7 @@ public class NonceGenerator { } return result } - + public static func sha256(_ input: String) -> String { let inputData = Data(input.utf8) let hashedData = SHA256.hash(data: inputData) diff --git a/Data/Data/Model/AppUser.swift b/Data/Data/Model/AppUser.swift index 88752685d..aef18bdf8 100644 --- a/Data/Data/Model/AppUser.swift +++ b/Data/Data/Model/AppUser.swift @@ -8,18 +8,18 @@ import Foundation public struct AppUser: Identifiable, Equatable, Codable { - + public static func == (lhs: AppUser, rhs: AppUser) -> Bool { return lhs.id == rhs.id } - + public var id: String public var firstName: String? public var lastName: String? public var emailId: String? public let phoneNumber: String? public let loginType: LoginType - + public init(id: String, firstName: String?, lastName: String?, emailId: String?, phoneNumber: String?, loginType: LoginType) { self.id = id self.firstName = firstName diff --git a/Data/Data/Model/AuthHandler.swift b/Data/Data/Model/AuthHandler.swift index 191f2c5a2..6caa74e9d 100644 --- a/Data/Data/Model/AuthHandler.swift +++ b/Data/Data/Model/AuthHandler.swift @@ -10,25 +10,25 @@ import FirebaseAuth import FirebaseFirestore class AuthState: ObservableObject { - + let auth = FirebaseProvider.auth - + @Published var currentUser: User? - + func signIn(with credential: AuthCredential, completion: ((AuthHandlerResult?, Error?) -> Void)?) { auth.signIn(with: credential) } - + func signOut() { try? auth.signOut() } - + // Function to fetch and store user details in Firestore func fetchAndStoreUserDetails(uid: String) { let db = Firestore.firestore() let userRef = db.collection("users").document(uid) - - userRef.getDocument { document, error in + + userRef.getDocument { document, _ in if let document, document.exists { print("User details already exist.") } else { @@ -37,20 +37,20 @@ class AuthState: ObservableObject { } } } - + // Function to store default user details in Firestore func storeDefaultUserDetails(uid: String) { let db = Firestore.firestore() let userRef = db.collection("users").document(uid) - + // You can customize the default user details based on your requirements let defaultUserDetails: [String: Any] = [ "uid": uid, "displayName": "New User", - "email": "", + "email": "" // Add more user details as needed ] - + userRef.setData(defaultUserDetails) { error in if let error { print("Error storing user details: \(error.localizedDescription)") diff --git a/Data/Data/Model/Country.swift b/Data/Data/Model/Country.swift index 8b790f383..c7c62e6bb 100644 --- a/Data/Data/Model/Country.swift +++ b/Data/Data/Model/Country.swift @@ -13,20 +13,20 @@ public struct Country: Codable, Identifiable { public let name: String public let dialCode: String public let isoCode: String - + public init(name: String, dialCode: String, isoCode: String) { self.name = name self.dialCode = dialCode self.isoCode = isoCode } - + enum CodingKeys: String, CodingKey { case id case name case dialCode = "dial_code" case isoCode = "code" } - + public var flag: String { return String(String.UnicodeScalarView( isoCode.unicodeScalars.compactMap({ UnicodeScalar(127397 + $0.value) }))) diff --git a/Data/Data/Model/FirestoreManager.swift b/Data/Data/Model/FirestoreManager.swift index 579153f83..ddfce7b43 100644 --- a/Data/Data/Model/FirestoreManager.swift +++ b/Data/Data/Model/FirestoreManager.swift @@ -9,15 +9,15 @@ import Combine import FirebaseFirestore public class FirestoreManager: ObservableObject { - + private let DATABASE_NAME: String = "Users" - + private let db = Firestore.firestore() - + public func addUser(user: AppUser) -> AnyPublisher { Future { [weak self] promise in guard let self else { return } - + do { let document: () = try self.db.collection(self.DATABASE_NAME).document(user.id).setData(from: user) promise(.success(document)) @@ -27,11 +27,11 @@ public class FirestoreManager: ObservableObject { } }.eraseToAnyPublisher() } - + public func updateUser(user: AppUser) -> AnyPublisher { Future { [weak self] promise in guard let self else { return } - + do { let document: () = try self.db.collection(self.DATABASE_NAME).document(user.id).setData(from: user, merge: true) promise(.success(document)) @@ -41,11 +41,11 @@ public class FirestoreManager: ObservableObject { } }.eraseToAnyPublisher() } - + public func deleteUser(id: String) -> AnyPublisher { Future { [weak self] promise in guard let self else { return } - + self.db.collection(self.DATABASE_NAME).document(id).delete { error in if let error { LogE("FirestoreManager :: \(#function): Deleting collection failed with error: \(error.localizedDescription).") @@ -56,24 +56,24 @@ public class FirestoreManager: ObservableObject { } }.eraseToAnyPublisher() } - + public func fetchUsers() -> AnyPublisher<[AppUser], ServiceError> { return Future { [weak self] promise in guard let self = self else { return } - + self.db.collection(self.DATABASE_NAME).getDocuments { (snapshot, error) in if let error { LogE("FirestoreManager :: \(#function) error: \(error.localizedDescription)") promise(.failure(.serverError())) return } - + guard let snapshot else { LogE("FirestoreManager :: \(#function) The document is not available.") promise(.failure(.serverError())) // You can replace this with your own error type. return } - + do { var users: [AppUser] = [] for document in snapshot.documents { diff --git a/Data/Data/Router/AppRoute.swift b/Data/Data/Router/AppRoute.swift index 79d02a251..ac35143c8 100644 --- a/Data/Data/Router/AppRoute.swift +++ b/Data/Data/Router/AppRoute.swift @@ -10,7 +10,7 @@ import Foundation public enum AppRoute: Hashable { case Home case Profile - + var key: String { switch self { case .Home: diff --git a/Data/Data/Router/RouterView.swift b/Data/Data/Router/RouterView.swift index 71eceef1a..d6cfa3050 100644 --- a/Data/Data/Router/RouterView.swift +++ b/Data/Data/Router/RouterView.swift @@ -9,13 +9,13 @@ import Foundation import SwiftUI public enum MainRoute: Hashable { - + case Onboard case Login case PhoneLogin case VerifyOTP(phoneNumber: String, verificationId: String) case HomeRoute - + var key: String { switch self { case .Onboard: @@ -37,7 +37,7 @@ public struct RouterView: View { @ObservedObject var router: Router @ViewBuilder var buildView: (T) -> Content - + public init(router: Router, @ViewBuilder buildView: @escaping (T) -> Content) { self.router = router self.buildView = buildView diff --git a/Data/Data/Services/ServiceError.swift b/Data/Data/Services/ServiceError.swift index 61dec3973..4ea05d9df 100644 --- a/Data/Data/Services/ServiceError.swift +++ b/Data/Data/Services/ServiceError.swift @@ -21,7 +21,7 @@ public enum ServiceError: LocalizedError, Equatable { return "" case .unauthorized: return "You are an unauthorised user." - case .serverError(let statusCode): + case .serverError: return "Server error encountered." case .networkError: return "No internet connection!" diff --git a/Data/Data/Store/SplitoPreference.swift b/Data/Data/Store/SplitoPreference.swift index 3e116505c..6c845389b 100644 --- a/Data/Data/Store/SplitoPreference.swift +++ b/Data/Data/Store/SplitoPreference.swift @@ -8,19 +8,19 @@ import Foundation public class SplitoPreference { - + enum Key: String { case isOnboardShown = "is_onboard_shown" case isVerifiedUser = "is_verified_user" case user = "user" } - + private let userDefaults: UserDefaults - + init() { self.userDefaults = UserDefaults.standard } - + public var isOnboardShown: Bool { get { return userDefaults.bool(forKey: Key.isOnboardShown.rawValue) @@ -29,7 +29,7 @@ public class SplitoPreference { userDefaults.synchronize() } } - + public var isVerifiedUser: Bool { get { return userDefaults.bool(forKey: Key.isVerifiedUser.rawValue) @@ -38,7 +38,7 @@ public class SplitoPreference { userDefaults.synchronize() } } - + public var user: AppUser? { get { do { diff --git a/ExportOptions.plist b/ExportOptions.plist new file mode 100644 index 000000000..3feea9c73 --- /dev/null +++ b/ExportOptions.plist @@ -0,0 +1,25 @@ + + + + + destination + export + method + app-store + provisioningProfiles + + com.canopas.splito + d2191150-0eff-4808-a10a-232c2b48cfb3 + + signingCertificate + EC6D008B1B33BDFDF4B61D6FCC24E214A75C4B0E + signingStyle + manual + stripSwiftSymbols + + teamID + S985H2T7J8 + uploadSymbols + + + diff --git a/Podfile b/Podfile index 0ced60a23..71608326a 100644 --- a/Podfile +++ b/Podfile @@ -9,7 +9,7 @@ use_frameworks! def data_pods pod 'Swinject' pod 'SwiftLint' - pod 'FirebaseCore' + pod 'FirebaseAuth' pod 'GoogleSignIn' pod 'FirebaseFirestore' @@ -66,6 +66,15 @@ post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET' + config.build_settings['EXPANDED_CODE_SIGN_IDENTITY'] = "" + config.build_settings['CODE_SIGNING_REQUIRED'] = "NO" + config.build_settings['CODE_SIGNING_ALLOWED'] = "NO" + end + + target.build_phases.each do |build_phase| + if build_phase.respond_to?(:name) && ["Create Symlinks to Header Folders"].include?(build_phase.name) + build_phase.output_paths = ["$(DERIVED_FILE_DIR)/header_symlinks_created"] + end end end end diff --git a/Podfile.lock b/Podfile.lock index 8efcfc3ed..50ee59645 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -643,28 +643,28 @@ PODS: - CocoaLumberjack/Core (3.8.4) - CocoaLumberjack/Swift (3.8.4): - CocoaLumberjack/Core - - FirebaseAppCheckInterop (10.21.0) - - FirebaseAuth (10.21.0): + - FirebaseAppCheckInterop (10.22.0) + - FirebaseAuth (10.22.0): - FirebaseAppCheckInterop (~> 10.17) - FirebaseCore (~> 10.0) - GoogleUtilities/AppDelegateSwizzler (~> 7.8) - GoogleUtilities/Environment (~> 7.8) - GTMSessionFetcher/Core (< 4.0, >= 2.1) - RecaptchaInterop (~> 100.0) - - FirebaseCore (10.21.0): + - FirebaseCore (10.22.0): - FirebaseCoreInternal (~> 10.0) - GoogleUtilities/Environment (~> 7.12) - GoogleUtilities/Logger (~> 7.12) - - FirebaseCoreExtension (10.21.0): + - FirebaseCoreExtension (10.22.0): - FirebaseCore (~> 10.0) - - FirebaseCoreInternal (10.21.0): + - FirebaseCoreInternal (10.22.0): - "GoogleUtilities/NSData+zlib (~> 7.8)" - - FirebaseFirestore (10.21.0): + - FirebaseFirestore (10.22.0): - FirebaseCore (~> 10.0) - FirebaseCoreExtension (~> 10.0) - FirebaseFirestoreInternal (~> 10.17) - FirebaseSharedSwift (~> 10.0) - - FirebaseFirestoreInternal (10.21.0): + - FirebaseFirestoreInternal (10.22.0): - abseil/algorithm (~> 1.20220623.0) - abseil/base (~> 1.20220623.0) - abseil/container/flat_hash_map (~> 1.20220623.0) @@ -677,27 +677,34 @@ PODS: - FirebaseCore (~> 10.0) - "gRPC-C++ (~> 1.49.1)" - leveldb-library (~> 1.22) - - nanopb (< 2.30910.0, >= 2.30908.0) - - FirebaseSharedSwift (10.21.0) + - nanopb (< 2.30911.0, >= 2.30908.0) + - FirebaseSharedSwift (10.22.0) - GoogleSignIn (7.0.0): - AppAuth (~> 1.5) - GTMAppAuth (< 3.0, >= 1.3) - GTMSessionFetcher/Core (< 4.0, >= 1.1) - - GoogleUtilities/AppDelegateSwizzler (7.12.0): + - GoogleUtilities/AppDelegateSwizzler (7.13.0): - GoogleUtilities/Environment - GoogleUtilities/Logger - GoogleUtilities/Network - - GoogleUtilities/Environment (7.12.0): + - GoogleUtilities/Privacy + - GoogleUtilities/Environment (7.13.0): + - GoogleUtilities/Privacy - PromisesObjC (< 3.0, >= 1.2) - - GoogleUtilities/Logger (7.12.0): + - GoogleUtilities/Logger (7.13.0): - GoogleUtilities/Environment - - GoogleUtilities/Network (7.12.0): + - GoogleUtilities/Privacy + - GoogleUtilities/Network (7.13.0): - GoogleUtilities/Logger - "GoogleUtilities/NSData+zlib" + - GoogleUtilities/Privacy - GoogleUtilities/Reachability - - "GoogleUtilities/NSData+zlib (7.12.0)" - - GoogleUtilities/Reachability (7.12.0): + - "GoogleUtilities/NSData+zlib (7.13.0)": + - GoogleUtilities/Privacy + - GoogleUtilities/Privacy (7.13.0) + - GoogleUtilities/Reachability (7.13.0): - GoogleUtilities/Logger + - GoogleUtilities/Privacy - "gRPC-C++ (1.49.1)": - "gRPC-C++/Implementation (= 1.49.1)" - "gRPC-C++/Interface (= 1.49.1)" @@ -763,13 +770,13 @@ PODS: - AppAuth/Core (~> 1.6) - GTMSessionFetcher/Core (< 4.0, >= 1.5) - GTMSessionFetcher/Core (3.3.1) - - leveldb-library (1.22.3) - - nanopb (2.30909.1): - - nanopb/decode (= 2.30909.1) - - nanopb/encode (= 2.30909.1) - - nanopb/decode (2.30909.1) - - nanopb/encode (2.30909.1) - - PromisesObjC (2.3.1) + - leveldb-library (1.22.4) + - nanopb (2.30910.0): + - nanopb/decode (= 2.30910.0) + - nanopb/encode (= 2.30910.0) + - nanopb/decode (2.30910.0) + - nanopb/encode (2.30910.0) + - PromisesObjC (2.4.0) - RecaptchaInterop (100.0.0) - SSZipArchive (2.5.5) - SwiftLint (0.54.0) @@ -778,7 +785,6 @@ PODS: DEPENDENCIES: - CocoaLumberjack/Swift - FirebaseAuth - - FirebaseCore - FirebaseFirestore - GoogleSignIn - SSZipArchive @@ -818,28 +824,28 @@ SPEC CHECKSUMS: AppAuth: 3bb1d1cd9340bd09f5ed189fb00b1cc28e1e8570 BoringSSL-GRPC: 3175b25143e648463a56daeaaa499c6cb86dad33 CocoaLumberjack: df59726690390bb8aaaa585938564ba1c8dbbb44 - FirebaseAppCheckInterop: 69fc7d8f6a1cbfa973efb8d1723651de30d12525 - FirebaseAuth: 42f07198c4ed6b55643a147ae682d32200f3ff6d - FirebaseCore: 74f647ad9739ea75112ce6c3b3b91f5488ce1122 - FirebaseCoreExtension: 1c044fd46e95036cccb29134757c499613f3f564 - FirebaseCoreInternal: 43c1788eaeee9d1b97caaa751af567ce11010d00 - FirebaseFirestore: cadbbc63223d27fdbdaca7cbdae2a6dc809a3929 - FirebaseFirestoreInternal: 7ac1e0c5b4e75aeb898dfe4b1d6d77abbac9eca3 - FirebaseSharedSwift: 19b3f709993d6fa1d84941d41c01e3c4c11eab93 + FirebaseAppCheckInterop: 58db3e9494751399cf3e7b7e3e705cff71099153 + FirebaseAuth: bbe4c68f958504ba9e54aee181adbdf5b664fbc6 + FirebaseCore: 0326ec9b05fbed8f8716cddbf0e36894a13837f7 + FirebaseCoreExtension: 6394c00b887d0bebadbc7049c464aa0cbddc5d41 + FirebaseCoreInternal: bca337352024b18424a61e478460547d46c4c753 + FirebaseFirestore: 16cb8a85fc29da272deaed22a101e24703251da9 + FirebaseFirestoreInternal: 86fe6fc8ca156309cb4842d2d7b2f15c669a64a0 + FirebaseSharedSwift: 48076404e6e52372290d15a07d2ed1d2f1754023 GoogleSignIn: b232380cf495a429b8095d3178a8d5855b42e842 - GoogleUtilities: 0759d1a57ebb953965c2dfe0ba4c82e95ccc2e34 + GoogleUtilities: d053d902a8edaa9904e1bd00c37535385b8ed152 "gRPC-C++": 2df8cba576898bdacd29f0266d5236fa0e26ba6a gRPC-Core: a21a60aefc08c68c247b439a9ef97174b0c54f96 GTMAppAuth: 99fb010047ba3973b7026e45393f51f27ab965ae GTMSessionFetcher: 8a1b34ad97ebe6f909fb8b9b77fba99943007556 - leveldb-library: e74c27d8fbd22854db7cb467968a0b8aa1db7126 - nanopb: d4d75c12cd1316f4a64e3c6963f879ecd4b5e0d5 - PromisesObjC: c50d2056b5253dadbd6c2bea79b0674bd5a52fa4 + leveldb-library: 06a69cc7582d64b29424a63e085e683cc188230a + nanopb: 438bc412db1928dac798aa6fd75726007be04262 + PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 RecaptchaInterop: 7d1a4a01a6b2cb1610a47ef3f85f0c411434cb21 SSZipArchive: c69881e8ac5521f0e622291387add5f60f30f3c4 SwiftLint: c1de071d9d08c8aba837545f6254315bc900e211 Swinject: 893c9a543000ac2f10ee4cbaf0933c6992c935d5 -PODFILE CHECKSUM: 0f55d966745fa7c2d63fc25a2b7e38474f1b9102 +PODFILE CHECKSUM: bb8023585496b46da6cb314248d3b860852d18bf COCOAPODS: 1.15.0 diff --git a/Splito.xcodeproj/project.pbxproj b/Splito.xcodeproj/project.pbxproj index 29f4ed65e..98f501b27 100644 --- a/Splito.xcodeproj/project.pbxproj +++ b/Splito.xcodeproj/project.pbxproj @@ -7,11 +7,10 @@ objects = { /* Begin PBXBuildFile section */ - 30515125B05289A6456C72BE /* Pods_Splito_SplitoUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 16A58FFA0121DBF48E4EDED9 /* Pods_Splito_SplitoUITests.framework */; }; - 5641C3ACEE7C531DEC725117 /* Pods_Splito.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E2B50BB1EB5D94FCB24EA9BA /* Pods_Splito.framework */; }; - 6DCCE5CB9951DE09E400A58F /* Pods_SplitoTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B788E31C598AACC0E413EFE /* Pods_SplitoTests.framework */; }; + 229C1134A678C1E63F56237A /* Pods_SplitoTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 590D65F43211234CE0B8577D /* Pods_SplitoTests.framework */; }; + 3BC568907377816CF2DBBD19 /* Pods_Splito_SplitoUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3250DFA698064E351112A85 /* Pods_Splito_SplitoUITests.framework */; }; D8015C052B7A47CF0002886A /* Data.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8015C042B7A47CF0002886A /* Data.framework */; }; - D8015C062B7A47CF0002886A /* Data.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D8015C042B7A47CF0002886A /* Data.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + D863857B2B908AB600A8C6EB /* VERSION in Resources */ = {isa = PBXBuildFile; fileRef = D863857A2B908AB600A8C6EB /* VERSION */; }; D889F5B92B7A521F008C6A43 /* SplashView.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D889F5B82B7A521F008C6A43 /* SplashView.storyboard */; }; D89684452B722D3400D5F721 /* SplitoApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = D89684442B722D3400D5F721 /* SplitoApp.swift */; }; D89684492B722D3700D5F721 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D89684482B722D3700D5F721 /* Assets.xcassets */; }; @@ -37,9 +36,9 @@ D8AC26F72B84B12800CEAAD3 /* LoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8AC26ED2B84B12800CEAAD3 /* LoginView.swift */; }; D8AC27152B84B73000CEAAD3 /* PageControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8AC27142B84B72F00CEAAD3 /* PageControl.swift */; }; D8AC27E22B84C06500CEAAD3 /* BaseStyle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8AC27E12B84C06500CEAAD3 /* BaseStyle.framework */; }; - D8AC27E32B84C06500CEAAD3 /* BaseStyle.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D8AC27E12B84C06500CEAAD3 /* BaseStyle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; D8D42A972B86FBF8009B345D /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = D8D42A962B86FBF8009B345D /* GoogleService-Info.plist */; }; D8D6C3A02B79F8110023CF08 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8D6C39F2B79F8110023CF08 /* AppDelegate.swift */; }; + F1B29DB9FD88F3957B6A9DA3 /* Pods_Splito.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB74A14C9198B44CD1501702 /* Pods_Splito.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -59,32 +58,19 @@ }; /* End PBXContainerItemProxy section */ -/* Begin PBXCopyFilesBuildPhase section */ - D8015C072B7A47D00002886A /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - D8015C062B7A47CF0002886A /* Data.framework in Embed Frameworks */, - D8AC27E32B84C06500CEAAD3 /* BaseStyle.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - /* Begin PBXFileReference section */ - 16A58FFA0121DBF48E4EDED9 /* Pods_Splito_SplitoUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Splito_SplitoUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 179C77B27ADDDC9F5BF1CA10 /* Pods-SplitoTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SplitoTests.debug.xcconfig"; path = "Target Support Files/Pods-SplitoTests/Pods-SplitoTests.debug.xcconfig"; sourceTree = ""; }; - 56987BECBE572A879D696BB2 /* Pods-SplitoTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SplitoTests.release.xcconfig"; path = "Target Support Files/Pods-SplitoTests/Pods-SplitoTests.release.xcconfig"; sourceTree = ""; }; - 5B788E31C598AACC0E413EFE /* Pods_SplitoTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SplitoTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5BA7E992B10D661238B15AEA /* Pods-Splito.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Splito.release.xcconfig"; path = "Target Support Files/Pods-Splito/Pods-Splito.release.xcconfig"; sourceTree = ""; }; - 8B50D355E3E3806CE075FD35 /* Pods-Splito-SplitoUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Splito-SplitoUITests.debug.xcconfig"; path = "Target Support Files/Pods-Splito-SplitoUITests/Pods-Splito-SplitoUITests.debug.xcconfig"; sourceTree = ""; }; - 8E0FA9DAC1D9F21F3EA38DFF /* Pods-Splito-SplitoUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Splito-SplitoUITests.release.xcconfig"; path = "Target Support Files/Pods-Splito-SplitoUITests/Pods-Splito-SplitoUITests.release.xcconfig"; sourceTree = ""; }; - C93A295F066152A1AB2719FA /* Pods-Splito.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Splito.debug.xcconfig"; path = "Target Support Files/Pods-Splito/Pods-Splito.debug.xcconfig"; sourceTree = ""; }; + 328FA3BD79A0C02BD95C0D18 /* Pods-Splito.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Splito.release.xcconfig"; path = "Target Support Files/Pods-Splito/Pods-Splito.release.xcconfig"; sourceTree = ""; }; + 590D65F43211234CE0B8577D /* Pods_SplitoTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SplitoTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5D9976EF7FD476F63099E094 /* Pods-Splito.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Splito.debug.xcconfig"; path = "Target Support Files/Pods-Splito/Pods-Splito.debug.xcconfig"; sourceTree = ""; }; + 6AD61D26FB1A0DAD18D11CD4 /* Pods-Splito-SplitoUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Splito-SplitoUITests.debug.xcconfig"; path = "Target Support Files/Pods-Splito-SplitoUITests/Pods-Splito-SplitoUITests.debug.xcconfig"; sourceTree = ""; }; + A43ED5B12ED9A893E69F700A /* Pods-SplitoTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SplitoTests.release.xcconfig"; path = "Target Support Files/Pods-SplitoTests/Pods-SplitoTests.release.xcconfig"; sourceTree = ""; }; + CB74A14C9198B44CD1501702 /* Pods_Splito.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Splito.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D00D9C8E9C9D67B1F5171F51 /* Pods-SplitoTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SplitoTests.debug.xcconfig"; path = "Target Support Files/Pods-SplitoTests/Pods-SplitoTests.debug.xcconfig"; sourceTree = ""; }; + D65AF4437E878FD0ABA95F13 /* Pods-Splito-SplitoUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Splito-SplitoUITests.release.xcconfig"; path = "Target Support Files/Pods-Splito-SplitoUITests/Pods-Splito-SplitoUITests.release.xcconfig"; sourceTree = ""; }; D8015C042B7A47CF0002886A /* Data.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Data.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D8015C082B7A47D80002886A /* UI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = UI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D863857A2B908AB600A8C6EB /* VERSION */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = VERSION; sourceTree = ""; }; + D863857E2B909A5A00A8C6EB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; D889F5B82B7A521F008C6A43 /* SplashView.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = SplashView.storyboard; sourceTree = ""; }; D89684412B722D3400D5F721 /* Splito.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Splito.app; sourceTree = BUILT_PRODUCTS_DIR; }; D89684442B722D3400D5F721 /* SplitoApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplitoApp.swift; sourceTree = ""; }; @@ -118,7 +104,7 @@ D8AC27E12B84C06500CEAAD3 /* BaseStyle.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = BaseStyle.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D8D42A962B86FBF8009B345D /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; D8D6C39F2B79F8110023CF08 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - E2B50BB1EB5D94FCB24EA9BA /* Pods_Splito.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Splito.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F3250DFA698064E351112A85 /* Pods_Splito_SplitoUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Splito_SplitoUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -128,7 +114,7 @@ files = ( D8015C052B7A47CF0002886A /* Data.framework in Frameworks */, D8AC27E22B84C06500CEAAD3 /* BaseStyle.framework in Frameworks */, - 5641C3ACEE7C531DEC725117 /* Pods_Splito.framework in Frameworks */, + F1B29DB9FD88F3957B6A9DA3 /* Pods_Splito.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -136,7 +122,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6DCCE5CB9951DE09E400A58F /* Pods_SplitoTests.framework in Frameworks */, + 229C1134A678C1E63F56237A /* Pods_SplitoTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -144,7 +130,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 30515125B05289A6456C72BE /* Pods_Splito_SplitoUITests.framework in Frameworks */, + 3BC568907377816CF2DBBD19 /* Pods_Splito_SplitoUITests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -159,9 +145,9 @@ D8AC26DF2B84B07700CEAAD3 /* BaseUI.framework */, D8015C082B7A47D80002886A /* UI.framework */, D8015C042B7A47CF0002886A /* Data.framework */, - E2B50BB1EB5D94FCB24EA9BA /* Pods_Splito.framework */, - 16A58FFA0121DBF48E4EDED9 /* Pods_Splito_SplitoUITests.framework */, - 5B788E31C598AACC0E413EFE /* Pods_SplitoTests.framework */, + CB74A14C9198B44CD1501702 /* Pods_Splito.framework */, + F3250DFA698064E351112A85 /* Pods_Splito_SplitoUITests.framework */, + 590D65F43211234CE0B8577D /* Pods_SplitoTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -169,12 +155,12 @@ BAA91BB875B265C15A963001 /* Pods */ = { isa = PBXGroup; children = ( - C93A295F066152A1AB2719FA /* Pods-Splito.debug.xcconfig */, - 5BA7E992B10D661238B15AEA /* Pods-Splito.release.xcconfig */, - 8B50D355E3E3806CE075FD35 /* Pods-Splito-SplitoUITests.debug.xcconfig */, - 8E0FA9DAC1D9F21F3EA38DFF /* Pods-Splito-SplitoUITests.release.xcconfig */, - 179C77B27ADDDC9F5BF1CA10 /* Pods-SplitoTests.debug.xcconfig */, - 56987BECBE572A879D696BB2 /* Pods-SplitoTests.release.xcconfig */, + 5D9976EF7FD476F63099E094 /* Pods-Splito.debug.xcconfig */, + 328FA3BD79A0C02BD95C0D18 /* Pods-Splito.release.xcconfig */, + 6AD61D26FB1A0DAD18D11CD4 /* Pods-Splito-SplitoUITests.debug.xcconfig */, + D65AF4437E878FD0ABA95F13 /* Pods-Splito-SplitoUITests.release.xcconfig */, + D00D9C8E9C9D67B1F5171F51 /* Pods-SplitoTests.debug.xcconfig */, + A43ED5B12ED9A893E69F700A /* Pods-SplitoTests.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -205,6 +191,7 @@ isa = PBXGroup; children = ( D89DBE202B87433B00E5F1BD /* Splito.entitlements */, + D863857A2B908AB600A8C6EB /* VERSION */, D89684442B722D3400D5F721 /* SplitoApp.swift */, D8D6C39F2B79F8110023CF08 /* AppDelegate.swift */, D8AC25D12B7F43EA00CEAAD3 /* Plist */, @@ -303,6 +290,7 @@ D8AC25D12B7F43EA00CEAAD3 /* Plist */ = { isa = PBXGroup; children = ( + D863857E2B909A5A00A8C6EB /* Info.plist */, D8D42A962B86FBF8009B345D /* GoogleService-Info.plist */, ); path = Plist; @@ -360,13 +348,12 @@ isa = PBXNativeTarget; buildConfigurationList = D89684652B722D3700D5F721 /* Build configuration list for PBXNativeTarget "Splito" */; buildPhases = ( - A810618F94EB2CFF7A640FE4 /* [CP] Check Pods Manifest.lock */, - D8DF8B3C2B7A238000165138 /* SwiftLint */, + 7EA397BB91DF2F3109DE3869 /* [CP] Check Pods Manifest.lock */, D896843D2B722D3400D5F721 /* Sources */, + D8DF8B3C2B7A238000165138 /* SwiftLint */, D896843E2B722D3400D5F721 /* Frameworks */, D896843F2B722D3400D5F721 /* Resources */, - D8015C072B7A47D00002886A /* Embed Frameworks */, - 70A034B4CE0BA96B32D01377 /* [CP] Embed Pods Frameworks */, + 8C3E193364425E64FA41521B /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -381,7 +368,7 @@ isa = PBXNativeTarget; buildConfigurationList = D89684682B722D3700D5F721 /* Build configuration list for PBXNativeTarget "SplitoTests" */; buildPhases = ( - EC1304C623E7BFCEBDC368E1 /* [CP] Check Pods Manifest.lock */, + 65A26FB61A4A2D4438DA593D /* [CP] Check Pods Manifest.lock */, D896844D2B722D3700D5F721 /* Sources */, D896844E2B722D3700D5F721 /* Frameworks */, D896844F2B722D3700D5F721 /* Resources */, @@ -400,11 +387,11 @@ isa = PBXNativeTarget; buildConfigurationList = D896846B2B722D3700D5F721 /* Build configuration list for PBXNativeTarget "SplitoUITests" */; buildPhases = ( - 42B08446C2D5BED0B5F21E60 /* [CP] Check Pods Manifest.lock */, + BEE564C54684C0A37CAEFFDE /* [CP] Check Pods Manifest.lock */, D89684572B722D3700D5F721 /* Sources */, D89684582B722D3700D5F721 /* Frameworks */, D89684592B722D3700D5F721 /* Resources */, - 9B0634E05002621A96AA5B4F /* [CP] Embed Pods Frameworks */, + F73BF53E04099C2D3501CF98 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -468,6 +455,7 @@ D89684492B722D3700D5F721 /* Assets.xcassets in Resources */, D8D42A972B86FBF8009B345D /* GoogleService-Info.plist in Resources */, D889F5B92B7A521F008C6A43 /* SplashView.storyboard in Resources */, + D863857B2B908AB600A8C6EB /* VERSION in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -488,7 +476,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 42B08446C2D5BED0B5F21E60 /* [CP] Check Pods Manifest.lock */ = { + 65A26FB61A4A2D4438DA593D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -503,48 +491,53 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Splito-SplitoUITests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-SplitoTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 70A034B4CE0BA96B32D01377 /* [CP] Embed Pods Frameworks */ = { + 7EA397BB91DF2F3109DE3869 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Splito/Pods-Splito-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Splito/Pods-Splito-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Splito-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Splito/Pods-Splito-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9B0634E05002621A96AA5B4F /* [CP] Embed Pods Frameworks */ = { + 8C3E193364425E64FA41521B /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Splito-SplitoUITests/Pods-Splito-SplitoUITests-frameworks-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-Splito/Pods-Splito-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Splito-SplitoUITests/Pods-Splito-SplitoUITests-frameworks-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-Splito/Pods-Splito-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Splito-SplitoUITests/Pods-Splito-SplitoUITests-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Splito/Pods-Splito-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - A810618F94EB2CFF7A640FE4 /* [CP] Check Pods Manifest.lock */ = { + BEE564C54684C0A37CAEFFDE /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -559,7 +552,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Splito-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Splito-SplitoUITests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -585,26 +578,21 @@ shellPath = /bin/sh; shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"${PODS_ROOT}/SwiftLint/swiftlint\" --fix Splito\n\"${PODS_ROOT}/SwiftLint/swiftlint\" Splito\n"; }; - EC1304C623E7BFCEBDC368E1 /* [CP] Check Pods Manifest.lock */ = { + F73BF53E04099C2D3501CF98 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Splito-SplitoUITests/Pods-Splito-SplitoUITests-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-SplitoTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Splito-SplitoUITests/Pods-Splito-SplitoUITests-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Splito-SplitoUITests/Pods-Splito-SplitoUITests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -790,19 +778,20 @@ }; D89684662B722D3700D5F721 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C93A295F066152A1AB2719FA /* Pods-Splito.debug.xcconfig */; + baseConfigurationReference = 5D9976EF7FD476F63099E094 /* Pods-Splito.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = Splito/Splito.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 10000000; DEVELOPMENT_ASSET_PATHS = "\"Splito/Preview Content\""; DEVELOPMENT_TEAM = S985H2T7J8; ENABLE_PREVIEWS = YES; ENABLE_USER_SCRIPT_SANDBOXING = NO; GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = Splito/Plist/Info.plist; + INFOPLIST_FILE = "$(SRCROOT)/Splito/Plist/Info.plist"; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchStoryboardName = SplashView; @@ -815,29 +804,95 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0; + OTHER_LDFLAGS = ( + "$(inherited)", + "-framework", + "\"AppAuth\"", + "-framework", + "\"CocoaLumberjack\"", + "-framework", + "\"CoreGraphics\"", + "-framework", + "\"CoreText\"", + "-framework", + "\"FBLPromises\"", + "-framework", + "\"FirebaseAppCheckInterop\"", + "-framework", + "\"FirebaseAuth\"", + "-framework", + "\"FirebaseCore\"", + "-framework", + "\"FirebaseCoreExtension\"", + "-framework", + "\"FirebaseCoreInternal\"", + "-framework", + "\"FirebaseFirestore\"", + "-framework", + "\"FirebaseFirestoreInternal\"", + "-framework", + "\"FirebaseSharedSwift\"", + "-framework", + "\"Foundation\"", + "-framework", + "\"GTMAppAuth\"", + "-framework", + "\"GTMSessionFetcher\"", + "-framework", + "\"GoogleSignIn\"", + "-framework", + "\"GoogleUtilities\"", + "-framework", + "\"LocalAuthentication\"", + "-framework", + "\"RecaptchaInterop\"", + "-framework", + "\"SSZipArchive\"", + "-framework", + "\"SafariServices\"", + "-framework", + "\"Security\"", + "-framework", + "\"Swinject\"", + "-framework", + "\"SystemConfiguration\"", + "-framework", + "\"UIKit\"", + "-framework", + "\"openssl_grpc\"", + "-weak_framework", + "\"AuthenticationServices\"", + "-Wl", + "-Wno-deprecated-declarations", + ); PRODUCT_BUNDLE_IDENTIFIER = com.canopas.splito; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; + app_version_code = 1000000; + app_version_name = 1.0.0; }; name = Debug; }; D89684672B722D3700D5F721 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5BA7E992B10D661238B15AEA /* Pods-Splito.release.xcconfig */; + baseConfigurationReference = 328FA3BD79A0C02BD95C0D18 /* Pods-Splito.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = Splito/Splito.entitlements; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CODE_SIGN_IDENTITY = "Apple Development"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "Apple Distribution: CANOPAS SOFTWARE LLP (S985H2T7J8)"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 10000000; DEVELOPMENT_ASSET_PATHS = "\"Splito/Preview Content\""; - DEVELOPMENT_TEAM = S985H2T7J8; + DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = S985H2T7J8; ENABLE_PREVIEWS = YES; ENABLE_USER_SCRIPT_SANDBOXING = NO; GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = Splito/Plist/Info.plist; + INFOPLIST_FILE = "$(SRCROOT)/Splito/Plist/Info.plist"; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchStoryboardName = SplashView; @@ -850,17 +905,82 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0; + OTHER_LDFLAGS = ( + "$(inherited)", + "-framework", + "\"AppAuth\"", + "-framework", + "\"CocoaLumberjack\"", + "-framework", + "\"CoreGraphics\"", + "-framework", + "\"CoreText\"", + "-framework", + "\"FBLPromises\"", + "-framework", + "\"FirebaseAppCheckInterop\"", + "-framework", + "\"FirebaseAuth\"", + "-framework", + "\"FirebaseCore\"", + "-framework", + "\"FirebaseCoreExtension\"", + "-framework", + "\"FirebaseCoreInternal\"", + "-framework", + "\"FirebaseFirestore\"", + "-framework", + "\"FirebaseFirestoreInternal\"", + "-framework", + "\"FirebaseSharedSwift\"", + "-framework", + "\"Foundation\"", + "-framework", + "\"GTMAppAuth\"", + "-framework", + "\"GTMSessionFetcher\"", + "-framework", + "\"GoogleSignIn\"", + "-framework", + "\"GoogleUtilities\"", + "-framework", + "\"LocalAuthentication\"", + "-framework", + "\"RecaptchaInterop\"", + "-framework", + "\"SSZipArchive\"", + "-framework", + "\"SafariServices\"", + "-framework", + "\"Security\"", + "-framework", + "\"Swinject\"", + "-framework", + "\"SystemConfiguration\"", + "-framework", + "\"UIKit\"", + "-framework", + "\"openssl_grpc\"", + "-weak_framework", + "\"AuthenticationServices\"", + "-Wl", + "-Wno-deprecated-declarations", + ); PRODUCT_BUNDLE_IDENTIFIER = com.canopas.splito; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "provision-splito-distribution-2024-03-04"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; + app_version_code = 1000000; + app_version_name = 1.0.0; }; name = Release; }; D89684692B722D3700D5F721 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 179C77B27ADDDC9F5BF1CA10 /* Pods-SplitoTests.debug.xcconfig */; + baseConfigurationReference = D00D9C8E9C9D67B1F5171F51 /* Pods-SplitoTests.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; BUNDLE_LOADER = "$(TEST_HOST)"; @@ -881,7 +1001,7 @@ }; D896846A2B722D3700D5F721 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 56987BECBE572A879D696BB2 /* Pods-SplitoTests.release.xcconfig */; + baseConfigurationReference = A43ED5B12ED9A893E69F700A /* Pods-SplitoTests.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; BUNDLE_LOADER = "$(TEST_HOST)"; @@ -902,7 +1022,7 @@ }; D896846C2B722D3700D5F721 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8B50D355E3E3806CE075FD35 /* Pods-Splito-SplitoUITests.debug.xcconfig */; + baseConfigurationReference = 6AD61D26FB1A0DAD18D11CD4 /* Pods-Splito-SplitoUITests.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; CODE_SIGN_STYLE = Automatic; @@ -921,7 +1041,7 @@ }; D896846D2B722D3700D5F721 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8E0FA9DAC1D9F21F3EA38DFF /* Pods-Splito-SplitoUITests.release.xcconfig */; + baseConfigurationReference = D65AF4437E878FD0ABA95F13 /* Pods-Splito-SplitoUITests.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; CODE_SIGN_STYLE = Automatic; diff --git a/Splito.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/Splito.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index 0c67376eb..000000000 --- a/Splito.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/Splito/Plist/Info.plist b/Splito/Plist/Info.plist index 783358a04..b0f1bfd49 100644 --- a/Splito/Plist/Info.plist +++ b/Splito/Plist/Info.plist @@ -2,6 +2,10 @@ + CFBundleVersion + $(app_version_code) + CFBundleShortVersionString + $(app_version_name) CFBundleURLTypes diff --git a/Splito/VERSION b/Splito/VERSION new file mode 100644 index 000000000..1bb9786c7 --- /dev/null +++ b/Splito/VERSION @@ -0,0 +1 @@ +1.0.x diff --git a/install_dist_certs.sh b/install_dist_certs.sh new file mode 100644 index 000000000..34ebe81e8 --- /dev/null +++ b/install_dist_certs.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env sh + +# Recreate the certificate from the secure environment variable +CERTIFICATE_P12=dist_certificate.p12 + +# Recreate the certificate from the secure environment variable +echo $BUILD_CERTIFICATE_KEY | base64 --decode > $CERTIFICATE_P12 + +echo "XXX --- Find keychain and password" +security list-keychains +security find-generic-password -s $BUILD_KEYCHAIN + +echo "XXX --- Set default keychain" +security default-keychain -s $BUILD_KEYCHAIN + +echo "XXX --- Unlocking keychain..." +# Unlock the keychain +security unlock-keychain -p $BUILD_KEYCHAIN_PASSWORD $BUILD_KEYCHAIN + +# Set keychain settings +security set-keychain-settings $BUILD_KEYCHAIN + +echo "XXX --- Import the certificate to the keychain" +# Import the certificate to the keychain +security import $CERTIFICATE_P12 -k $BUILD_KEYCHAIN -P $BUILD_CERTIFICATE_PASSWORD -T /usr/bin/codesign; + +echo "XXX --- Set key partition list" +# Set key partition list +security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k $BUILD_KEYCHAIN_PASSWORD $BUILD_KEYCHAIN + +echo "XXX --- Locking the keychain" +# Lock the keychain +security lock-keychain $BUILD_KEYCHAIN + +# remove certs +rm -fr *.p12 diff --git a/install_dist_profile.sh b/install_dist_profile.sh new file mode 100644 index 000000000..8c1b1075b --- /dev/null +++ b/install_dist_profile.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env sh + +DIST_PROFILE_FILE=${BUILD_PROVISION_UUID}.mobileprovision + +# Recreate the certificate from the secure environment variable +echo $BUILD_PROVISION_PROFILE | base64 --decode > $DIST_PROFILE_FILE + +# Lock the keychain +#security lock-keychain $BUILD_KEYCHAIN + +echo "XXX --- Profile: $BUILD_KEYCHAIN_PASSWORD" + +echo "XXX --- Unlocking keychain..." +# Unlock the keychain +security unlock-keychain -p $BUILD_KEYCHAIN_PASSWORD $BUILD_KEYCHAIN + +echo "XXX --- Find password" +security find-generic-password -s $BUILD_KEYCHAIN + +echo "XXX --- Create a directory for provisioning profiles" +# Create a directory for provisioning profiles +mkdir -p "$HOME/Library/MobileDevice/Provisioning Profiles" + +echo "XXX --- Copy the provisioning profile where Xcode can find it" +# Copy the provisioning profile where Xcode can find it +cp ${DIST_PROFILE_FILE} "$HOME/Library/MobileDevice/Provisioning Profiles/${BUILD_PROVISION_UUID}.mobileprovision" + +echo "XXX --- Lock the keychain" +# Lock the keychain +security lock-keychain $BUILD_KEYCHAIN + +echo "XXX --- Clean profile" +# clean +rm -fr *.mobileprovision