diff --git a/Podfile b/Podfile index 71ef345..f070b23 100644 --- a/Podfile +++ b/Podfile @@ -7,7 +7,7 @@ target 'suixinkan_ios' do pod 'Kingfisher', '~> 8.0' pod 'CYLTabBarController', '~> 1.99.38' - # 高德地图 SDK:仅真机构建时链接;模拟器通过 post_install 剥离 + # 高德地图 SDK 仅支持真机;模拟器通过下方 post_install 剥离链接 pod 'AMap3DMap-NO-IDFA', '~> 11.1' pod 'AMapSearch-NO-IDFA', '~> 9.7' pod 'AMapLocation-NO-IDFA', '~> 2.11' @@ -17,6 +17,7 @@ target 'suixinkan_ios' do end end +# 模拟器构建时不链接高德(真机专用 framework),仅保留通用 Pod 依赖 SIMULATOR_OTHER_LDFLAGS = <<~FLAGS.squish -ObjC -l"c++" -l"swiftCoreGraphics" -l"z" -framework "Accelerate" -framework "CFNetwork" -framework "CYLTabBarController" @@ -32,6 +33,12 @@ post_install do |installer| target.build_configurations.each do |config| config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '16.0' end + + next unless target.name.start_with?('AMap') + + target.build_configurations.each do |config| + config.build_settings['SUPPORTED_PLATFORMS'] = 'iphoneos' + end end %w[Pods-suixinkan_ios Pods-suixinkan_iosTests].each do |target_name| @@ -48,51 +55,4 @@ post_install do |installer| File.write(path, content) end end - - installer.pods_project.targets.each do |target| - next unless target.name.start_with?('AMap') - - target.build_configurations.each do |config| - config.build_settings['SUPPORTED_PLATFORMS'] = 'iphoneos' - end - end - - resources_script = File.join( - installer.sandbox.root, - 'Target Support Files/Pods-suixinkan_ios/Pods-suixinkan_ios-resources.sh' - ) - if File.exist?(resources_script) - content = File.read(resources_script) - unless content.include?('SKIP_AMAP_RESOURCES_FOR_SIMULATOR') - content.sub!( - "RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt", - <<~SHELL - # SKIP_AMAP_RESOURCES_FOR_SIMULATOR - if [ "${EFFECTIVE_PLATFORM_NAME}" = "-iphonesimulator" ]; then - exit 0 - fi - - RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt - SHELL - ) - File.write(resources_script, content) - end - end - - installer.aggregate_targets.each do |aggregate_target| - aggregate_target.user_project.native_targets.each do |target| - target.build_configurations.each do |config| - config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = '' - config.build_settings['ENABLE_USER_SCRIPT_SANDBOXING'] = 'NO' - - next unless target.name == 'suixinkan_ios' - - existing = config.build_settings['SWIFT_ACTIVE_COMPILATION_CONDITIONS[sdk=iphoneos*]'] || '$(inherited)' - unless existing.to_s.include?('AMAP_ENABLED') - config.build_settings['SWIFT_ACTIVE_COMPILATION_CONDITIONS[sdk=iphoneos*]'] = "#{existing} AMAP_ENABLED" - end - end - end - aggregate_target.user_project.save - end end diff --git a/Podfile.lock b/Podfile.lock index d07b091..481df75 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -39,6 +39,6 @@ SPEC CHECKSUMS: Kingfisher: db468f911dd666c9134dcbeec4db8bed52e4132d SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a -PODFILE CHECKSUM: 4068d11e2fdbc0a6514a9ec709302300b8e54da8 +PODFILE CHECKSUM: 9659fc63d0173f0286a7da18725e548d86c24ca6 COCOAPODS: 1.16.2 diff --git a/suixinkan_ios.xcodeproj/project.pbxproj b/suixinkan_ios.xcodeproj/project.pbxproj index b9bbafd..3f55046 100644 --- a/suixinkan_ios.xcodeproj/project.pbxproj +++ b/suixinkan_ios.xcodeproj/project.pbxproj @@ -55,6 +55,8 @@ }; A1TEST012FEE49BE00240726 /* suixinkan_iosTests */ = { isa = PBXFileSystemSynchronizedRootGroup; + exceptions = ( + ); path = suixinkan_iosTests; sourceTree = ""; }; @@ -243,14 +245,10 @@ inputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-suixinkan_ios/Pods-suixinkan_ios-resources-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); name = "[CP] Copy Pods Resources"; outputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-suixinkan_ios/Pods-suixinkan_ios-resources-${CONFIGURATION}-output-files.xcfilelist", ); - outputPaths = ( - ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-suixinkan_ios/Pods-suixinkan_ios-resources.sh\"\n"; @@ -308,14 +306,10 @@ inputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-suixinkan_ios/Pods-suixinkan_ios-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-suixinkan_ios/Pods-suixinkan_ios-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); - outputPaths = ( - ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-suixinkan_ios/Pods-suixinkan_ios-frameworks.sh\"\n"; diff --git a/suixinkan_ios/App/Navigation/AppTab.swift b/suixinkan_ios/App/Navigation/AppTab.swift index 2542c50..bff9595 100644 --- a/suixinkan_ios/App/Navigation/AppTab.swift +++ b/suixinkan_ios/App/Navigation/AppTab.swift @@ -33,13 +33,13 @@ enum AppTab: String, CaseIterable, Identifiable, Hashable { var selectedImageName: String { switch self { case .home: - "TabHomeSelected" + "tab_home_selected" case .orders: - "TabOrderSelected" + "tab_order_selected" case .statistics: - "TabDataSelected" + "tab_data_selected" case .profile: - "TabProfileSelected" + "tab_profile_selected" } } @@ -47,13 +47,13 @@ enum AppTab: String, CaseIterable, Identifiable, Hashable { var unselectedImageName: String { switch self { case .home: - "TabHomeUnselected" + "tab_home_unselected" case .orders: - "TabOrderUnselected" + "tab_order_unselected" case .statistics: - "TabDataUnselected" + "tab_data_unselected" case .profile: - "TabProfileUnselected" + "tab_profile_unselected" } } @@ -66,7 +66,6 @@ enum AppTab: String, CaseIterable, Identifiable, Hashable { image: unselectedImage, selectedImage: selectedImage ) - item.accessibilityIdentifier = "main.tab.\(rawValue)" return item } diff --git a/suixinkan_ios/Assets.xcassets/TabDataSelected.imageset/tab_data_selected.png b/suixinkan_ios/Assets.xcassets/TabDataSelected.imageset/tab_data_selected.png deleted file mode 100644 index 25a61ce..0000000 Binary files a/suixinkan_ios/Assets.xcassets/TabDataSelected.imageset/tab_data_selected.png and /dev/null differ diff --git a/suixinkan_ios/Assets.xcassets/TabDataUnselected.imageset/tab_data_unselected.png b/suixinkan_ios/Assets.xcassets/TabDataUnselected.imageset/tab_data_unselected.png deleted file mode 100644 index 2a92be2..0000000 Binary files a/suixinkan_ios/Assets.xcassets/TabDataUnselected.imageset/tab_data_unselected.png and /dev/null differ diff --git a/suixinkan_ios/Assets.xcassets/TabHomeSelected.imageset/tab_home_selected.png b/suixinkan_ios/Assets.xcassets/TabHomeSelected.imageset/tab_home_selected.png deleted file mode 100644 index 8aeef0c..0000000 Binary files a/suixinkan_ios/Assets.xcassets/TabHomeSelected.imageset/tab_home_selected.png and /dev/null differ diff --git a/suixinkan_ios/Assets.xcassets/TabHomeUnselected.imageset/tab_home_unselected.png b/suixinkan_ios/Assets.xcassets/TabHomeUnselected.imageset/tab_home_unselected.png deleted file mode 100644 index 48cedd3..0000000 Binary files a/suixinkan_ios/Assets.xcassets/TabHomeUnselected.imageset/tab_home_unselected.png and /dev/null differ diff --git a/suixinkan_ios/Assets.xcassets/TabOrderSelected.imageset/tab_order_selected.png b/suixinkan_ios/Assets.xcassets/TabOrderSelected.imageset/tab_order_selected.png deleted file mode 100644 index 8d10fbc..0000000 Binary files a/suixinkan_ios/Assets.xcassets/TabOrderSelected.imageset/tab_order_selected.png and /dev/null differ diff --git a/suixinkan_ios/Assets.xcassets/TabOrderUnselected.imageset/tab_order_unselected.png b/suixinkan_ios/Assets.xcassets/TabOrderUnselected.imageset/tab_order_unselected.png deleted file mode 100644 index 366d345..0000000 Binary files a/suixinkan_ios/Assets.xcassets/TabOrderUnselected.imageset/tab_order_unselected.png and /dev/null differ diff --git a/suixinkan_ios/Assets.xcassets/TabProfileSelected.imageset/tab_profile_selected.png b/suixinkan_ios/Assets.xcassets/TabProfileSelected.imageset/tab_profile_selected.png deleted file mode 100644 index bf60175..0000000 Binary files a/suixinkan_ios/Assets.xcassets/TabProfileSelected.imageset/tab_profile_selected.png and /dev/null differ diff --git a/suixinkan_ios/Assets.xcassets/TabProfileUnselected.imageset/tab_profile_unselected.png b/suixinkan_ios/Assets.xcassets/TabProfileUnselected.imageset/tab_profile_unselected.png deleted file mode 100644 index 9c24f06..0000000 Binary files a/suixinkan_ios/Assets.xcassets/TabProfileUnselected.imageset/tab_profile_unselected.png and /dev/null differ diff --git a/suixinkan_ios/Assets.xcassets/icon_scan.imageset/Contents.json b/suixinkan_ios/Assets.xcassets/icon_scan.imageset/Contents.json new file mode 100644 index 0000000..c5d9acc --- /dev/null +++ b/suixinkan_ios/Assets.xcassets/icon_scan.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "icon_scan.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "icon_scan@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "icon_scan@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/suixinkan_ios/Assets.xcassets/icon_scan.imageset/icon_scan.png b/suixinkan_ios/Assets.xcassets/icon_scan.imageset/icon_scan.png new file mode 100644 index 0000000..a03cfd1 Binary files /dev/null and b/suixinkan_ios/Assets.xcassets/icon_scan.imageset/icon_scan.png differ diff --git a/suixinkan_ios/Assets.xcassets/icon_scan.imageset/icon_scan@2x.png b/suixinkan_ios/Assets.xcassets/icon_scan.imageset/icon_scan@2x.png new file mode 100644 index 0000000..1f76573 Binary files /dev/null and b/suixinkan_ios/Assets.xcassets/icon_scan.imageset/icon_scan@2x.png differ diff --git a/suixinkan_ios/Assets.xcassets/icon_scan.imageset/icon_scan@3x.png b/suixinkan_ios/Assets.xcassets/icon_scan.imageset/icon_scan@3x.png new file mode 100644 index 0000000..72e3340 Binary files /dev/null and b/suixinkan_ios/Assets.xcassets/icon_scan.imageset/icon_scan@3x.png differ diff --git a/suixinkan_ios/Assets.xcassets/TabDataSelected.imageset/Contents.json b/suixinkan_ios/Assets.xcassets/tab_data_selected.imageset/Contents.json similarity index 77% rename from suixinkan_ios/Assets.xcassets/TabDataSelected.imageset/Contents.json rename to suixinkan_ios/Assets.xcassets/tab_data_selected.imageset/Contents.json index 37520de..90c8ea2 100644 --- a/suixinkan_ios/Assets.xcassets/TabDataSelected.imageset/Contents.json +++ b/suixinkan_ios/Assets.xcassets/tab_data_selected.imageset/Contents.json @@ -6,10 +6,12 @@ "scale" : "1x" }, { + "filename" : "tab_data_selected@2x.png", "idiom" : "universal", "scale" : "2x" }, { + "filename" : "tab_data_selected@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/suixinkan_ios/Assets.xcassets/tab_data_selected.imageset/tab_data_selected.png b/suixinkan_ios/Assets.xcassets/tab_data_selected.imageset/tab_data_selected.png new file mode 100644 index 0000000..6a5fe1c Binary files /dev/null and b/suixinkan_ios/Assets.xcassets/tab_data_selected.imageset/tab_data_selected.png differ diff --git a/suixinkan_ios/Assets.xcassets/tab_data_selected.imageset/tab_data_selected@2x.png b/suixinkan_ios/Assets.xcassets/tab_data_selected.imageset/tab_data_selected@2x.png new file mode 100644 index 0000000..84e2fb9 Binary files /dev/null and b/suixinkan_ios/Assets.xcassets/tab_data_selected.imageset/tab_data_selected@2x.png differ diff --git a/suixinkan_ios/Assets.xcassets/tab_data_selected.imageset/tab_data_selected@3x.png b/suixinkan_ios/Assets.xcassets/tab_data_selected.imageset/tab_data_selected@3x.png new file mode 100644 index 0000000..50a0640 Binary files /dev/null and b/suixinkan_ios/Assets.xcassets/tab_data_selected.imageset/tab_data_selected@3x.png differ diff --git a/suixinkan_ios/Assets.xcassets/TabDataUnselected.imageset/Contents.json b/suixinkan_ios/Assets.xcassets/tab_data_unselected.imageset/Contents.json similarity index 76% rename from suixinkan_ios/Assets.xcassets/TabDataUnselected.imageset/Contents.json rename to suixinkan_ios/Assets.xcassets/tab_data_unselected.imageset/Contents.json index faa503c..254b4fb 100644 --- a/suixinkan_ios/Assets.xcassets/TabDataUnselected.imageset/Contents.json +++ b/suixinkan_ios/Assets.xcassets/tab_data_unselected.imageset/Contents.json @@ -6,10 +6,12 @@ "scale" : "1x" }, { + "filename" : "tab_data_unselected@2x.png", "idiom" : "universal", "scale" : "2x" }, { + "filename" : "tab_data_unselected@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/suixinkan_ios/Assets.xcassets/tab_data_unselected.imageset/tab_data_unselected.png b/suixinkan_ios/Assets.xcassets/tab_data_unselected.imageset/tab_data_unselected.png new file mode 100644 index 0000000..cd2a559 Binary files /dev/null and b/suixinkan_ios/Assets.xcassets/tab_data_unselected.imageset/tab_data_unselected.png differ diff --git a/suixinkan_ios/Assets.xcassets/tab_data_unselected.imageset/tab_data_unselected@2x.png b/suixinkan_ios/Assets.xcassets/tab_data_unselected.imageset/tab_data_unselected@2x.png new file mode 100644 index 0000000..c1031e8 Binary files /dev/null and b/suixinkan_ios/Assets.xcassets/tab_data_unselected.imageset/tab_data_unselected@2x.png differ diff --git a/suixinkan_ios/Assets.xcassets/tab_data_unselected.imageset/tab_data_unselected@3x.png b/suixinkan_ios/Assets.xcassets/tab_data_unselected.imageset/tab_data_unselected@3x.png new file mode 100644 index 0000000..4e875e1 Binary files /dev/null and b/suixinkan_ios/Assets.xcassets/tab_data_unselected.imageset/tab_data_unselected@3x.png differ diff --git a/suixinkan_ios/Assets.xcassets/TabHomeSelected.imageset/Contents.json b/suixinkan_ios/Assets.xcassets/tab_home_selected.imageset/Contents.json similarity index 77% rename from suixinkan_ios/Assets.xcassets/TabHomeSelected.imageset/Contents.json rename to suixinkan_ios/Assets.xcassets/tab_home_selected.imageset/Contents.json index 8cca175..566e1d5 100644 --- a/suixinkan_ios/Assets.xcassets/TabHomeSelected.imageset/Contents.json +++ b/suixinkan_ios/Assets.xcassets/tab_home_selected.imageset/Contents.json @@ -6,10 +6,12 @@ "scale" : "1x" }, { + "filename" : "tab_home_selected@2x.png", "idiom" : "universal", "scale" : "2x" }, { + "filename" : "tab_home_selected@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/suixinkan_ios/Assets.xcassets/tab_home_selected.imageset/tab_home_selected.png b/suixinkan_ios/Assets.xcassets/tab_home_selected.imageset/tab_home_selected.png new file mode 100644 index 0000000..f59bbb8 Binary files /dev/null and b/suixinkan_ios/Assets.xcassets/tab_home_selected.imageset/tab_home_selected.png differ diff --git a/suixinkan_ios/Assets.xcassets/tab_home_selected.imageset/tab_home_selected@2x.png b/suixinkan_ios/Assets.xcassets/tab_home_selected.imageset/tab_home_selected@2x.png new file mode 100644 index 0000000..50f856b Binary files /dev/null and b/suixinkan_ios/Assets.xcassets/tab_home_selected.imageset/tab_home_selected@2x.png differ diff --git a/suixinkan_ios/Assets.xcassets/tab_home_selected.imageset/tab_home_selected@3x.png b/suixinkan_ios/Assets.xcassets/tab_home_selected.imageset/tab_home_selected@3x.png new file mode 100644 index 0000000..f7c4f2c Binary files /dev/null and b/suixinkan_ios/Assets.xcassets/tab_home_selected.imageset/tab_home_selected@3x.png differ diff --git a/suixinkan_ios/Assets.xcassets/TabHomeUnselected.imageset/Contents.json b/suixinkan_ios/Assets.xcassets/tab_home_unselected.imageset/Contents.json similarity index 76% rename from suixinkan_ios/Assets.xcassets/TabHomeUnselected.imageset/Contents.json rename to suixinkan_ios/Assets.xcassets/tab_home_unselected.imageset/Contents.json index 7c6d760..e6194ed 100644 --- a/suixinkan_ios/Assets.xcassets/TabHomeUnselected.imageset/Contents.json +++ b/suixinkan_ios/Assets.xcassets/tab_home_unselected.imageset/Contents.json @@ -6,10 +6,12 @@ "scale" : "1x" }, { + "filename" : "tab_home_unselected@2x.png", "idiom" : "universal", "scale" : "2x" }, { + "filename" : "tab_home_unselected@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/suixinkan_ios/Assets.xcassets/tab_home_unselected.imageset/tab_home_unselected.png b/suixinkan_ios/Assets.xcassets/tab_home_unselected.imageset/tab_home_unselected.png new file mode 100644 index 0000000..1cdaf5c Binary files /dev/null and b/suixinkan_ios/Assets.xcassets/tab_home_unselected.imageset/tab_home_unselected.png differ diff --git a/suixinkan_ios/Assets.xcassets/tab_home_unselected.imageset/tab_home_unselected@2x.png b/suixinkan_ios/Assets.xcassets/tab_home_unselected.imageset/tab_home_unselected@2x.png new file mode 100644 index 0000000..54fb11a Binary files /dev/null and b/suixinkan_ios/Assets.xcassets/tab_home_unselected.imageset/tab_home_unselected@2x.png differ diff --git a/suixinkan_ios/Assets.xcassets/tab_home_unselected.imageset/tab_home_unselected@3x.png b/suixinkan_ios/Assets.xcassets/tab_home_unselected.imageset/tab_home_unselected@3x.png new file mode 100644 index 0000000..95bc97d Binary files /dev/null and b/suixinkan_ios/Assets.xcassets/tab_home_unselected.imageset/tab_home_unselected@3x.png differ diff --git a/suixinkan_ios/Assets.xcassets/TabOrderSelected.imageset/Contents.json b/suixinkan_ios/Assets.xcassets/tab_order_selected.imageset/Contents.json similarity index 76% rename from suixinkan_ios/Assets.xcassets/TabOrderSelected.imageset/Contents.json rename to suixinkan_ios/Assets.xcassets/tab_order_selected.imageset/Contents.json index 1b32685..1e81253 100644 --- a/suixinkan_ios/Assets.xcassets/TabOrderSelected.imageset/Contents.json +++ b/suixinkan_ios/Assets.xcassets/tab_order_selected.imageset/Contents.json @@ -6,10 +6,12 @@ "scale" : "1x" }, { + "filename" : "tab_order_selected@2x.png", "idiom" : "universal", "scale" : "2x" }, { + "filename" : "tab_order_selected@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/suixinkan_ios/Assets.xcassets/tab_order_selected.imageset/tab_order_selected.png b/suixinkan_ios/Assets.xcassets/tab_order_selected.imageset/tab_order_selected.png new file mode 100644 index 0000000..3627ef9 Binary files /dev/null and b/suixinkan_ios/Assets.xcassets/tab_order_selected.imageset/tab_order_selected.png differ diff --git a/suixinkan_ios/Assets.xcassets/tab_order_selected.imageset/tab_order_selected@2x.png b/suixinkan_ios/Assets.xcassets/tab_order_selected.imageset/tab_order_selected@2x.png new file mode 100644 index 0000000..9a18927 Binary files /dev/null and b/suixinkan_ios/Assets.xcassets/tab_order_selected.imageset/tab_order_selected@2x.png differ diff --git a/suixinkan_ios/Assets.xcassets/tab_order_selected.imageset/tab_order_selected@3x.png b/suixinkan_ios/Assets.xcassets/tab_order_selected.imageset/tab_order_selected@3x.png new file mode 100644 index 0000000..255ebef Binary files /dev/null and b/suixinkan_ios/Assets.xcassets/tab_order_selected.imageset/tab_order_selected@3x.png differ diff --git a/suixinkan_ios/Assets.xcassets/TabOrderUnselected.imageset/Contents.json b/suixinkan_ios/Assets.xcassets/tab_order_unselected.imageset/Contents.json similarity index 76% rename from suixinkan_ios/Assets.xcassets/TabOrderUnselected.imageset/Contents.json rename to suixinkan_ios/Assets.xcassets/tab_order_unselected.imageset/Contents.json index 0241d89..89b0894 100644 --- a/suixinkan_ios/Assets.xcassets/TabOrderUnselected.imageset/Contents.json +++ b/suixinkan_ios/Assets.xcassets/tab_order_unselected.imageset/Contents.json @@ -6,10 +6,12 @@ "scale" : "1x" }, { + "filename" : "tab_order_unselected@2x.png", "idiom" : "universal", "scale" : "2x" }, { + "filename" : "tab_order_unselected@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/suixinkan_ios/Assets.xcassets/tab_order_unselected.imageset/tab_order_unselected.png b/suixinkan_ios/Assets.xcassets/tab_order_unselected.imageset/tab_order_unselected.png new file mode 100644 index 0000000..90a3d32 Binary files /dev/null and b/suixinkan_ios/Assets.xcassets/tab_order_unselected.imageset/tab_order_unselected.png differ diff --git a/suixinkan_ios/Assets.xcassets/tab_order_unselected.imageset/tab_order_unselected@2x.png b/suixinkan_ios/Assets.xcassets/tab_order_unselected.imageset/tab_order_unselected@2x.png new file mode 100644 index 0000000..44ceb95 Binary files /dev/null and b/suixinkan_ios/Assets.xcassets/tab_order_unselected.imageset/tab_order_unselected@2x.png differ diff --git a/suixinkan_ios/Assets.xcassets/tab_order_unselected.imageset/tab_order_unselected@3x.png b/suixinkan_ios/Assets.xcassets/tab_order_unselected.imageset/tab_order_unselected@3x.png new file mode 100644 index 0000000..d49583c Binary files /dev/null and b/suixinkan_ios/Assets.xcassets/tab_order_unselected.imageset/tab_order_unselected@3x.png differ diff --git a/suixinkan_ios/Assets.xcassets/TabProfileSelected.imageset/Contents.json b/suixinkan_ios/Assets.xcassets/tab_profile_selected.imageset/Contents.json similarity index 76% rename from suixinkan_ios/Assets.xcassets/TabProfileSelected.imageset/Contents.json rename to suixinkan_ios/Assets.xcassets/tab_profile_selected.imageset/Contents.json index 3c5e11e..33d4fa6 100644 --- a/suixinkan_ios/Assets.xcassets/TabProfileSelected.imageset/Contents.json +++ b/suixinkan_ios/Assets.xcassets/tab_profile_selected.imageset/Contents.json @@ -6,10 +6,12 @@ "scale" : "1x" }, { + "filename" : "tab_profile_selected@2x.png", "idiom" : "universal", "scale" : "2x" }, { + "filename" : "tab_profile_selected@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/suixinkan_ios/Assets.xcassets/tab_profile_selected.imageset/tab_profile_selected.png b/suixinkan_ios/Assets.xcassets/tab_profile_selected.imageset/tab_profile_selected.png new file mode 100644 index 0000000..c5f7477 Binary files /dev/null and b/suixinkan_ios/Assets.xcassets/tab_profile_selected.imageset/tab_profile_selected.png differ diff --git a/suixinkan_ios/Assets.xcassets/tab_profile_selected.imageset/tab_profile_selected@2x.png b/suixinkan_ios/Assets.xcassets/tab_profile_selected.imageset/tab_profile_selected@2x.png new file mode 100644 index 0000000..e9ef614 Binary files /dev/null and b/suixinkan_ios/Assets.xcassets/tab_profile_selected.imageset/tab_profile_selected@2x.png differ diff --git a/suixinkan_ios/Assets.xcassets/tab_profile_selected.imageset/tab_profile_selected@3x.png b/suixinkan_ios/Assets.xcassets/tab_profile_selected.imageset/tab_profile_selected@3x.png new file mode 100644 index 0000000..b2996b3 Binary files /dev/null and b/suixinkan_ios/Assets.xcassets/tab_profile_selected.imageset/tab_profile_selected@3x.png differ diff --git a/suixinkan_ios/Assets.xcassets/TabProfileUnselected.imageset/Contents.json b/suixinkan_ios/Assets.xcassets/tab_profile_unselected.imageset/Contents.json similarity index 75% rename from suixinkan_ios/Assets.xcassets/TabProfileUnselected.imageset/Contents.json rename to suixinkan_ios/Assets.xcassets/tab_profile_unselected.imageset/Contents.json index 565e49d..961a1dd 100644 --- a/suixinkan_ios/Assets.xcassets/TabProfileUnselected.imageset/Contents.json +++ b/suixinkan_ios/Assets.xcassets/tab_profile_unselected.imageset/Contents.json @@ -6,10 +6,12 @@ "scale" : "1x" }, { + "filename" : "tab_profile_unselected@2x.png", "idiom" : "universal", "scale" : "2x" }, { + "filename" : "tab_profile_unselected@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/suixinkan_ios/Assets.xcassets/tab_profile_unselected.imageset/tab_profile_unselected.png b/suixinkan_ios/Assets.xcassets/tab_profile_unselected.imageset/tab_profile_unselected.png new file mode 100644 index 0000000..73f36da Binary files /dev/null and b/suixinkan_ios/Assets.xcassets/tab_profile_unselected.imageset/tab_profile_unselected.png differ diff --git a/suixinkan_ios/Assets.xcassets/tab_profile_unselected.imageset/tab_profile_unselected@2x.png b/suixinkan_ios/Assets.xcassets/tab_profile_unselected.imageset/tab_profile_unselected@2x.png new file mode 100644 index 0000000..18591e7 Binary files /dev/null and b/suixinkan_ios/Assets.xcassets/tab_profile_unselected.imageset/tab_profile_unselected@2x.png differ diff --git a/suixinkan_ios/Assets.xcassets/tab_profile_unselected.imageset/tab_profile_unselected@3x.png b/suixinkan_ios/Assets.xcassets/tab_profile_unselected.imageset/tab_profile_unselected@3x.png new file mode 100644 index 0000000..d5abb60 Binary files /dev/null and b/suixinkan_ios/Assets.xcassets/tab_profile_unselected.imageset/tab_profile_unselected@3x.png differ diff --git a/suixinkan_ios/Features/Main/ViewControllers/MainTabBarController.swift b/suixinkan_ios/Features/Main/ViewControllers/MainTabBarController.swift index 9c63cdb..a436494 100644 --- a/suixinkan_ios/Features/Main/ViewControllers/MainTabBarController.swift +++ b/suixinkan_ios/Features/Main/ViewControllers/MainTabBarController.swift @@ -18,12 +18,11 @@ final class MainTabBarController: CYLTabBarController { /// 初始化实例。 init(services: AppServices) { self.services = services - MainScanPlusButton.register() super.init(nibName: nil, bundle: nil) MainScanPlusButton.onScanTap = { [weak self] in self?.presentGlobalScanner() } - delegate = self +// delegate = self } @available(*, unavailable) @@ -86,11 +85,10 @@ final class MainTabBarController: CYLTabBarController { tabNavigationControllers[tab] = navigationController return navigationController } - applyTabAccessibilityIdentifiers() } /// 构建 CYLTabBarController 识别的 TabBarItem 属性字典。 - private func makeTabBarItemAttributes(for tab: AppTab) -> [String: Any] { + private func makeTabBarItemAttributes(for tab: AppTab) -> [String: String] { [ CYLTabBarItemTitle: tab.title, CYLTabBarItemImage: tab.unselectedImageName, @@ -98,13 +96,6 @@ final class MainTabBarController: CYLTabBarController { ] } - /// CYL 会根据属性字典重建 TabBarItem,因此在设置控制器后补充自动化标识。 - private func applyTabAccessibilityIdentifiers() { - for tab in AppTab.allCases { - tabNavigationControllers[tab]?.tabBarItem.accessibilityIdentifier = "main.tab.\(tab.rawValue)" - } - } - /// 绑定角标 ViewModel 回调。 private func bindBadgeViewModel() { badgeViewModel.onChange = { [weak self] in diff --git a/suixinkan_ios/Features/Main/Views/MainScanPlusButton.swift b/suixinkan_ios/Features/Main/Views/MainScanPlusButton.swift index 9e1ffbb..6df5d96 100644 --- a/suixinkan_ios/Features/Main/Views/MainScanPlusButton.swift +++ b/suixinkan_ios/Features/Main/Views/MainScanPlusButton.swift @@ -16,10 +16,20 @@ final class MainScanPlusButton: CYLPlusButton, CYLPlusButtonSubclassing { /// 构建中间扫码按钮实例,供 CYLTabBarController 注册使用。 static func plusButton() -> Any { - let button = MainScanPlusButton(type: .custom) - button.frame = CGRect(x: 0, y: 0, width: 70, height: 64) - button.configureAppearance() - button.addTarget(button, action: #selector(handleScanTap), for: .touchUpInside) + let button = MainScanPlusButton() + button.setImage(UIImage(named: "icon_scan"), for: .normal) + button.titleLabel?.textAlignment = .center + + button.titleLabel?.font = UIFont.systemFont(ofSize: 10) + + button.setTitle("发布", for: .normal) + button.setTitleColor(UIColor.gray, for: .normal) + + button.setTitle("选中", for: .selected) + button.setTitleColor(UIColor(red:255.0/255.0,green:102.0/255.0,blue:0,alpha:1.0), for: .selected) + + button.adjustsImageWhenHighlighted = false + button.sizeToFit() return button } @@ -46,7 +56,7 @@ final class MainScanPlusButton: CYLPlusButton, CYLPlusButtonSubclassing { let symbolConfig = UIImage.SymbolConfiguration(pointSize: 30, weight: .bold) let iconView = UIImageView( - image: UIImage(systemName: "qrcode.viewfinder", withConfiguration: symbolConfig) + image: UIImage(named: "icon_scan") ) iconView.tintColor = .white iconView.contentMode = .scaleAspectFit diff --git a/suixinkan_ios/SceneDelegate.swift b/suixinkan_ios/SceneDelegate.swift index f3edfe3..6b74e0b 100644 --- a/suixinkan_ios/SceneDelegate.swift +++ b/suixinkan_ios/SceneDelegate.swift @@ -6,6 +6,7 @@ // import UIKit +import CYLTabBarController /// 窗口 Scene 代理,负责创建根窗口并挂载会话协调器。 class SceneDelegate: UIResponder, UIWindowSceneDelegate { @@ -23,6 +24,8 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { ) { guard let windowScene = scene as? UIWindowScene else { return } + MainScanPlusButton.register() + AppUITestLaunchState.resetIfNeeded() let rootViewController = RootViewController() diff --git a/suixinkan_iosTests/MainScanPlusButtonTests.swift b/suixinkan_iosTests/MainScanPlusButtonTests.swift index 4db61dc..0b4bebb 100644 --- a/suixinkan_iosTests/MainScanPlusButtonTests.swift +++ b/suixinkan_iosTests/MainScanPlusButtonTests.swift @@ -41,6 +41,21 @@ final class MainScanPlusButtonTests: XCTestCase { ) } } + + /// 测试各 Tab 的图标资源可被加载并挂载到 tabBarItem。 + func testMainTabBarControllerTabBarItemsHaveImages() { + let services = AppServices(apiClient: APIClient(session: MainTabRecordingURLSession())) + let controller = MainTabBarController(services: services) + controller.loadViewIfNeeded() + + for tab in AppTab.allCases { + let item = controller.navigationController(for: tab)?.tabBarItem + XCTAssertNotNil(item?.image, "tab \(tab.rawValue) image should not be nil") + XCTAssertNotNil(item?.selectedImage, "tab \(tab.rawValue) selectedImage should not be nil") + XCTAssertGreaterThan(item?.image?.size.width ?? 0, 0) + XCTAssertGreaterThan(item?.selectedImage?.size.width ?? 0, 0) + } + } } /// 主 Tab 测试使用的空网络会话,确保容器加载不触发真实请求。