Flutter iOS真机无法连接Mac本地服务器,请求接口报‘No host path’错误求助
Flutter iOS真机无法连接Mac本地服务器,请求接口报‘No host path’错误求助
我遇到了一个Flutter iOS真机和Mac本地服务器的网络连接问题,折腾了好久没解决,来求助大家!
问题场景与现象
- 设备信息:iPhone 12 Pro(iOS 18.6)物理设备,和Mac处于同一WiFi网络
- 测试情况:
- 用iPhone的curl命令可以正常访问Mac本地服务器
192.168.1.170:8181 - 用iPhone Safari也能打开服务器的Swagger文档页面
- 但在Flutter app中请求该服务器的接口时,始终返回**'No host path'**错误
- 用iPhone的curl命令可以正常访问Mac本地服务器
- 已尝试的操作:
- 首次启动app时已经授予了网络权限
- 参考过类似.NET后端的同类型问题解决方案,但没有效果
我的配置文件
Podfile
# Uncomment this line to define a global platform for your project platform :ios, '15.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' project 'Runner', { 'Debug' => :debug, 'Profile' => :release, 'Release' => :release, } def flutter_root generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) unless File.exist?(generated_xcode_build_settings_path) raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" end File.foreach(generated_xcode_build_settings_path) do |line| matches = line.match(/FLUTTER_ROOT\=(.*)/) return matches[1].strip if matches end raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" end require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) flutter_ios_podfile_setup target 'Runner' do use_frameworks! use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do inherit! :search_paths end end post_install do |installer| installer.pods_project.targets.each do |target| flutter_additional_ios_build_settings(target) target.build_configurations.each do |config| # You can remove unused permissions here # for more information: https://github.com/BaseflowIT/flutter-permission-handler/blob/master/permission_handler/ios/Classes/PermissionHandlerEnums.h # e.g. when you don't need camera permission, just add 'PERMISSION_CAMERA=0' config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [ '$(inherited)', ## dart: PermissionGroup.calendar ##'PERMISSION_EVENTS=1', ## dart: PermissionGroup.calendarFullAccess #'PERMISSION_EVENTS_FULL_ACCESS=1', ## dart: PermissionGroup.reminders #'PERMISSION_REMINDERS=1', ## dart: PermissionGroup.camera 'PERMISSION_CAMERA=1', ## dart: PermissionGroup.photos 'PERMISSION_PHOTOS=1', ## The 'PERMISSION_LOCATION' macro enables the `locationWhenInUse` and `locationAlways` permission. If ## the application only requires `locationWhenInUse`, only specify the `PERMISSION_LOCATION_WHENINUSE` ## macro. ## ## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse] 'PERMISSION_LOCATION=1', 'PERMISSION_LOCATION_WHENINUSE=0', ## dart: PermissionGroup.notification #'PERMISSION_NOTIFICATIONS=1', ## dart: PermissionGroup.mediaLibrary 'PERMISSION_MEDIA_LIBRARY=1', ] end end end
Info.plist
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleDevelopmentRegion</key> <string>$(DEVELOPMENT_LANGUAGE)</string> <key>CFBundleDisplayName</key> <string>Teekit App</string> <key>CFBundleExecutable</key> <string>$(EXECUTABLE_NAME)</string> <key>CFBundleIdentifier</key> <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundleName</key> <string>teekit_app</string> <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleShortVersionString</key> <string>$(FLUTTER_BUILD_NAME)</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleVersion</key> <string>$(FLUTTER_BUILD_NUMBER)</string> <key>LSRequiresIPhoneOS</key> <true/> <key>UILaunchStoryboardName</key> <string>LaunchScreen</string> <key>UIMainStoryboardFile</key> <string>Main</string> <key>UISupportedInterfaceOrientations</key> <array> <string>UIInterfaceOrientationPortrait</string> <string>UIInterfaceOrientationLandscapeLeft</string> <string>UIInterfaceOrientationLandscapeRight</string> </array> <key>UISupportedInterfaceOrientations~ipad</key> <array> <string>UIInterfaceOrientationPortrait</string> <string>UIInterfaceOrientationLandscapeLeft</string> <string>UIInterfaceOrientationLandscapeRight</string> </array> </dict> </plist>
我自己也梳理了几个可能的排查方向,但还没找到问题根源,也希望大家能补充更多思路:
- 是不是Flutter请求的URL格式有问题?比如漏加了
http://协议头? - iOS的ATS配置是不是限制了本地HTTP请求?
- 有没有可能是Flutter网络请求库的配置出错了?
求大家帮我看看可能的问题在哪里,有没有可行的解决办法?
内容来源于stack exchange
相关产品推荐
相关产品推荐

