Browse Source

隐藏功能

ios
Jolie 3 months ago
parent
commit
4d076498d1
5 changed files with 209 additions and 104 deletions
  1. 0
      ios/.pod_install_done
  2. 152
      ios/Runner.xcodeproj/project.pbxproj
  3. 10
      lib/pages/main/main_page.dart
  4. 6
      lib/widget/message/chat_input_bar.dart
  5. 145
      scripts/build_ios.sh

0
ios/.pod_install_done

152
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 = "<group>"; };
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; };
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 = "<group>"; };
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 = "<group>"; };
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 = "<group>"; };
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 = "<group>"; };
6A05741EC62B5EEBE22A6CF2 /* Runner.entitlements */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = "<group>"; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
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 = "<group>"; };
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 = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
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 = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
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 = "<group>"; };
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 = "<group>"; };
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 = "<group>"; };
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 = "<group>"; };
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 = "<group>"; };
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 = "<group>"; };
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 = "<group>";
};
331C8082294A63A400263BE5 /* RunnerTests */ = {
isa = PBXGroup;
children = (
@ -124,7 +115,7 @@
97C146EF1CF9000F007C117D /* Products */,
331C8082294A63A400263BE5 /* RunnerTests */,
DB523429F1E23B3AFAEEF636 /* Pods */,
18EC60AE150D603E57C4D66F /* Frameworks */,
ED8B7BE823F65BC3F8701DB7 /* Frameworks */,
);
sourceTree = "<group>";
};
@ -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 = "<group>";
};
ED8B7BE823F65BC3F8701DB7 /* Frameworks */ = {
isa = PBXGroup;
children = (
E8D4B383AC53E78BFB990701 /* Pods_Runner.framework */,
CFDA8452B03C6245DF85630D /* Pods_RunnerTests.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* 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;

10
lib/pages/main/main_page.dart

@ -41,7 +41,7 @@ class _MainPageState extends State<MainPage> {
//
homePage = HomePage();
discoverPage = DiscoverPage();
// discoverPage = DiscoverPage();
messagePage = MessagePage();
minePage = MinePage();
@ -80,7 +80,7 @@ class _MainPageState extends State<MainPage> {
controller: pageController,
children: [
homePage, // 使
discoverPage,
// discoverPage,
messagePage,
minePage,
],
@ -92,9 +92,9 @@ class _MainPageState extends State<MainPage> {
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),
]
)
),

6
lib/widget/message/chat_input_bar.dart

@ -308,9 +308,9 @@ class _ChatInputBarState extends State<ChatInputBar> {
// 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),
//

145
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
Loading…
Cancel
Save