diff --git a/ios/.pod_install_done b/ios/.pod_install_done new file mode 100644 index 0000000..e69de29 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index eeaedd4..6eb36ca 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -8,11 +8,11 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 2D2952405A246D6FED52F01C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFB57A27E7776B3F359A1C5C /* Pods_RunnerTests.framework */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 43CB40566F22DE689EF25D5F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E8D4B383AC53E78BFB990701 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 74C4FE64A41BA4C47423BB91 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4B909E9A193D37A26B4444E /* Pods_Runner.framework */; }; + 92E5B6DBC78A6AE711EE87A2 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CFDA8452B03C6245DF85630D /* Pods_RunnerTests.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; @@ -42,19 +42,17 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 021CA90F16630674A4CC6DB9 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 56C88C7D01770BE2DBFDD697 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 682C5B3EB10C94F9A20C1D3D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 68D8EA1EDA2FE7EDF257B31E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 6A05741EC62B5EEBE22A6CF2 /* Runner.entitlements */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7F56AD7679506554FF154F65 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 8CBCCA43DE77A1FF0E979ABA /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -62,10 +60,12 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9B57E2640B7D789CFC5E81D9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - A68585D9660E736DD281FC18 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - AFB57A27E7776B3F359A1C5C /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E4B909E9A193D37A26B4444E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AA2FEE0B7D310014F1F98AA3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B0E7DBB475E7D94C752927D7 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + CFDA8452B03C6245DF85630D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D323DD56B7141F4631B03E2D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + DA86754D181F2827D14477CF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E8D4B383AC53E78BFB990701 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -73,7 +73,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2D2952405A246D6FED52F01C /* Pods_RunnerTests.framework in Frameworks */, + 92E5B6DBC78A6AE711EE87A2 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -81,22 +81,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 74C4FE64A41BA4C47423BB91 /* Pods_Runner.framework in Frameworks */, + 43CB40566F22DE689EF25D5F /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 18EC60AE150D603E57C4D66F /* Frameworks */ = { - isa = PBXGroup; - children = ( - E4B909E9A193D37A26B4444E /* Pods_Runner.framework */, - AFB57A27E7776B3F359A1C5C /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -124,7 +115,7 @@ 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, DB523429F1E23B3AFAEEF636 /* Pods */, - 18EC60AE150D603E57C4D66F /* Frameworks */, + ED8B7BE823F65BC3F8701DB7 /* Frameworks */, ); sourceTree = ""; }; @@ -156,16 +147,25 @@ DB523429F1E23B3AFAEEF636 /* Pods */ = { isa = PBXGroup; children = ( - 7F56AD7679506554FF154F65 /* Pods-Runner.debug.xcconfig */, - 56C88C7D01770BE2DBFDD697 /* Pods-Runner.release.xcconfig */, - 9B57E2640B7D789CFC5E81D9 /* Pods-Runner.profile.xcconfig */, - A68585D9660E736DD281FC18 /* Pods-RunnerTests.debug.xcconfig */, - 021CA90F16630674A4CC6DB9 /* Pods-RunnerTests.release.xcconfig */, - 682C5B3EB10C94F9A20C1D3D /* Pods-RunnerTests.profile.xcconfig */, + AA2FEE0B7D310014F1F98AA3 /* Pods-Runner.debug.xcconfig */, + D323DD56B7141F4631B03E2D /* Pods-Runner.release.xcconfig */, + DA86754D181F2827D14477CF /* Pods-Runner.profile.xcconfig */, + 8CBCCA43DE77A1FF0E979ABA /* Pods-RunnerTests.debug.xcconfig */, + B0E7DBB475E7D94C752927D7 /* Pods-RunnerTests.release.xcconfig */, + 68D8EA1EDA2FE7EDF257B31E /* Pods-RunnerTests.profile.xcconfig */, ); path = Pods; sourceTree = ""; }; + ED8B7BE823F65BC3F8701DB7 /* Frameworks */ = { + isa = PBXGroup; + children = ( + E8D4B383AC53E78BFB990701 /* Pods_Runner.framework */, + CFDA8452B03C6245DF85630D /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -173,7 +173,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 0C02713F79384C47FC4BC013 /* [CP] Check Pods Manifest.lock */, + F5FDE7647B990ABD6BCB54A5 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, 48F1DEE821E4A637CF003B78 /* Frameworks */, @@ -192,15 +192,15 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 1E3D5394F2545E860D55E88C /* [CP] Check Pods Manifest.lock */, + CD46C830618249AC6A939F8D /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 94D55AE63458DA24E5D71252 /* [CP] Embed Pods Frameworks */, - 02B79A8133218288B832A3BC /* [CP] Copy Pods Resources */, + 3B7665868B4AB13318CB479D /* [CP] Embed Pods Frameworks */, + 885E323E207B38375631A310 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -272,114 +272,114 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 02B79A8133218288B832A3BC /* [CP] Copy Pods Resources */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + name = "Thin Binary"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 0C02713F79384C47FC4BC013 /* [CP] Check Pods Manifest.lock */ = { + 3B7665868B4AB13318CB479D /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-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-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-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-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 1E3D5394F2545E860D55E88C /* [CP] Check Pods Manifest.lock */ = { + 885E323E207B38375631A310 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${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-Runner/Pods-Runner-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 94D55AE63458DA24E5D71252 /* [CP] Embed Pods Frameworks */ = { + CD46C830618249AC6A939F8D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-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-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-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; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + F5FDE7647B990ABD6BCB54A5 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + 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; }; /* End PBXShellScriptBuildPhase section */ @@ -517,7 +517,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A68585D9660E736DD281FC18 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 8CBCCA43DE77A1FF0E979ABA /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -535,7 +535,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 021CA90F16630674A4CC6DB9 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = B0E7DBB475E7D94C752927D7 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -551,7 +551,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 682C5B3EB10C94F9A20C1D3D /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 68D8EA1EDA2FE7EDF257B31E /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/lib/pages/main/main_page.dart b/lib/pages/main/main_page.dart index 1876b4c..957e777 100644 --- a/lib/pages/main/main_page.dart +++ b/lib/pages/main/main_page.dart @@ -41,7 +41,7 @@ class _MainPageState extends State { // 初始化页面实例 homePage = HomePage(); - discoverPage = DiscoverPage(); + // discoverPage = DiscoverPage(); messagePage = MessagePage(); minePage = MinePage(); @@ -80,7 +80,7 @@ class _MainPageState extends State { controller: pageController, children: [ homePage, // 使用成员变量引用 - discoverPage, + // discoverPage, messagePage, minePage, ], @@ -92,9 +92,9 @@ class _MainPageState extends State { useVerticalDivider: false, navigationTabs: [ tabItem('首页', Assets.imagesHomePre, Assets.imagesHomeNol, 0), - tabItem('找对象', Assets.imagesDiscoverPre, Assets.imagesDiscoverNol, 1), - tabItem('消息', Assets.imagesMessagePre, Assets.imagesMessageNol, 2), - tabItem('我的', Assets.imagesMinePre, Assets.imagesMineNol, 3), + // tabItem('找对象', Assets.imagesDiscoverPre, Assets.imagesDiscoverNol, 1), + tabItem('消息', Assets.imagesMessagePre, Assets.imagesMessageNol, 1), + tabItem('我的', Assets.imagesMinePre, Assets.imagesMineNol, 2), ] ) ), diff --git a/lib/widget/message/chat_input_bar.dart b/lib/widget/message/chat_input_bar.dart index 70367fb..6f073cb 100644 --- a/lib/widget/message/chat_input_bar.dart +++ b/lib/widget/message/chat_input_bar.dart @@ -308,9 +308,9 @@ class _ChatInputBarState extends State { // widget.onVideoCall?.call(); // }), // 礼物按钮 - Image.asset(Assets.imagesGift, width: 24.w, height: 24.w).onTap(() { - widget.onGiftTap?.call(); - }), + // Image.asset(Assets.imagesGift, width: 24.w, height: 24.w).onTap(() { + // widget.onGiftTap?.call(); + // }), // 表情按钮 Image.asset(Assets.imagesEmoji, width: 24.w, height: 24.w).onTap(_toggleEmojiPanel), // 更多按钮 diff --git a/scripts/build_ios.sh b/scripts/build_ios.sh index c0dcbbe..7ebf9b6 100755 --- a/scripts/build_ios.sh +++ b/scripts/build_ios.sh @@ -1,8 +1,4 @@ #!/bin/bash -# usage: -# ./scripts/build_ios.sh --output /absolute/path/to/output.ipa [extra flutter build args...] -# ./scripts/build_ios.sh --output /absolute/path/to/dir [extra flutter build args...] - set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" @@ -12,6 +8,42 @@ DEFAULT_OUTPUT_DIR="$PROJECT_ROOT/build/ios_release" OUTPUT_DIR="$DEFAULT_OUTPUT_DIR" EXTRA_ARGS=() +# -------- 路径验证函数 -------- +validate_output_path() { + local path="$1" + + # 如果是文件路径(以 .ipa 结尾) + if [[ "$path" == *.ipa ]]; then + local dir="$(dirname "$path")" + # 检查目录是否可写 + if [[ ! -w "$dir" ]] 2>/dev/null; then + # 尝试创建目录 + if ! mkdir -p "$dir" 2>/dev/null; then + echo "❌ 错误: 无法创建输出目录: $dir" >&2 + echo " 提示: 请使用可写的路径,例如: ~/Desktop/output.ipa 或 ./build/myapp.ipa" >&2 + return 1 + fi + fi + # 检查父目录是否可写 + if [[ ! -w "$dir" ]]; then + echo "❌ 错误: 输出目录不可写: $dir" >&2 + return 1 + fi + else + # 如果是目录路径 + if [[ ! -w "$(dirname "$path")" ]] 2>/dev/null && [[ "$path" != "$PROJECT_ROOT"* ]]; then + # 尝试创建目录 + if ! mkdir -p "$path" 2>/dev/null; then + echo "❌ 错误: 无法创建输出目录: $path" >&2 + echo " 提示: 请使用可写的路径,例如: ~/Desktop/ 或 ./build/" >&2 + return 1 + fi + fi + fi + return 0 +} + +# -------- 参数解析 -------- while [[ $# -gt 0 ]]; do case "$1" in --output=*) @@ -19,10 +51,7 @@ while [[ $# -gt 0 ]]; do shift ;; --output) - if [[ $# -lt 2 ]]; then - echo "参数错误: --output 需要一个路径" >&2 - exit 1 - fi + [[ $# -lt 2 ]] && { echo "❌ --output 需要路径"; exit 1; } OUTPUT_DIR="$2" shift 2 ;; @@ -33,15 +62,83 @@ while [[ $# -gt 0 ]]; do esac done +# -------- 环境检查 -------- +command -v flutter >/dev/null 2>&1 || { + echo "❌ Flutter 未安装或未加入 PATH" + exit 1 +} + +xcodebuild -version >/dev/null 2>&1 || { + echo "❌ Xcode 未正确安装" + exit 1 +} + +echo "🧩 Flutter 版本:" +flutter --version + +# 验证输出路径 +if ! validate_output_path "$OUTPUT_DIR"; then + echo "⚠️ 使用默认输出目录: $DEFAULT_OUTPUT_DIR" + OUTPUT_DIR="$DEFAULT_OUTPUT_DIR" +fi + +# 展开 ~ 和相对路径 +OUTPUT_DIR="${OUTPUT_DIR/#\~/$HOME}" +if [[ "$OUTPUT_DIR" != /* ]]; then + OUTPUT_DIR="$PROJECT_ROOT/$OUTPUT_DIR" +fi + mkdir -p "$OUTPUT_DIR" pushd "$PROJECT_ROOT" >/dev/null + echo "📦 清理旧构建..." flutter clean +echo "🧹 清理 Flutter pub cache 中的 im_flutter_sdk..." +flutter pub cache clean im_flutter_sdk 2>/dev/null || true +flutter pub cache clean im_flutter_sdk_ios 2>/dev/null || true +echo " ✓ 已清理 im_flutter_sdk 相关缓存" + echo "📚 获取依赖..." flutter pub get +echo "🧹 清理 iOS 依赖缓存..." +cd ios +if [[ -f "Podfile.lock" ]]; then + rm -f Podfile.lock + echo " ✓ 已删除 Podfile.lock" +fi +if [[ -d "Pods" ]]; then + rm -rf Pods + echo " ✓ 已删除 Pods 目录" +fi +if [[ -d ".symlinks" ]]; then + rm -rf .symlinks + echo " ✓ 已删除 .symlinks 目录" +fi +# 清理 Xcode DerivedData 中的相关缓存 +if [[ -d "$HOME/Library/Developer/Xcode/DerivedData" ]]; then + find "$HOME/Library/Developer/Xcode/DerivedData" -name "*Runner*" -type d -exec rm -rf {} + 2>/dev/null || true + echo " ✓ 已清理 Xcode DerivedData" +fi +cd .. + +echo "📦 重新安装 iOS Pods..." +cd ios +pod deintegrate 2>/dev/null || true +# 清理 CocoaPods 缓存中的 im_flutter_sdk_ios 和 HyphenateChat +pod cache clean im_flutter_sdk_ios --all 2>/dev/null || true +pod cache clean HyphenateChat --all 2>/dev/null || true +# 强制更新 pod 仓库(仅清理时执行一次) +if [[ ! -f ".pod_install_done" ]]; then + echo " 🔄 更新 CocoaPods 仓库..." + pod repo update 2>/dev/null || true + touch .pod_install_done +fi +pod install +cd .. + echo "🚀 开始构建 iOS IPA..." if [[ ${#EXTRA_ARGS[@]} -gt 0 ]]; then flutter build ipa --release "${EXTRA_ARGS[@]}" @@ -49,28 +146,36 @@ else flutter build ipa --release fi -# IPA build output is typically in build/ios/ipa/ IPA_DIR="$PROJECT_ROOT/build/ios/ipa" -BUILT_IPA="$(find "$IPA_DIR" -maxdepth 1 -name '*.ipa' -print | head -n 1)" +BUILT_IPA="$(ls -t "$IPA_DIR"/*.ipa 2>/dev/null | head -n 1)" -if [[ -z "$BUILT_IPA" || ! -f "$BUILT_IPA" ]]; then - echo "❌ 错误: 未找到构建出的 IPA 文件" >&2 - echo "构建产物目录:$IPA_DIR" >&2 +if [[ -z "$BUILT_IPA" ]]; then + echo "❌ 未找到 IPA,构建失败" exit 1 fi -# Determine target path if [[ "$OUTPUT_DIR" == *.ipa ]]; then - # Output is a file path TARGET_PATH="$OUTPUT_DIR" - mkdir -p "$(dirname "$TARGET_PATH")" + # 确保父目录存在且可写 + parent_dir="$(dirname "$TARGET_PATH")" + if ! mkdir -p "$parent_dir" 2>/dev/null || [[ ! -w "$parent_dir" ]]; then + echo "❌ 错误: 无法写入到: $TARGET_PATH" >&2 + echo " 使用默认路径: $DEFAULT_OUTPUT_DIR/$(basename "$BUILT_IPA")" >&2 + TARGET_PATH="$DEFAULT_OUTPUT_DIR/$(basename "$BUILT_IPA")" + mkdir -p "$(dirname "$TARGET_PATH")" + fi else - # Output is a directory - mkdir -p "$OUTPUT_DIR" TARGET_PATH="$OUTPUT_DIR/$(basename "$BUILT_IPA")" + # 确保目录存在且可写 + if ! mkdir -p "$OUTPUT_DIR" 2>/dev/null || [[ ! -w "$OUTPUT_DIR" ]]; then + echo "❌ 错误: 无法写入到: $OUTPUT_DIR" >&2 + echo " 使用默认路径: $DEFAULT_OUTPUT_DIR" >&2 + TARGET_PATH="$DEFAULT_OUTPUT_DIR/$(basename "$BUILT_IPA")" + mkdir -p "$(dirname "$TARGET_PATH")" + fi fi cp "$BUILT_IPA" "$TARGET_PATH" -echo "✅ 构建完成,IPA 已保存到:$TARGET_PATH" -popd >/dev/null +echo "✅ 构建完成:$TARGET_PATH" +popd >/dev/null