[{"data":1,"prerenderedAt":1591},["ShallowReactive",2],{"content:\u002F2026\u002F08\u002Fflutter-macos-environment-setup":3,"surround:\u002F2026\u002F08\u002Fflutter-macos-environment-setup":1580},{"id":4,"title":5,"body":6,"categories":1557,"date":1559,"description":1560,"draft":1561,"extension":1562,"image":1563,"meta":1564,"navigation":1404,"path":1566,"permalink":1563,"published":1563,"readingTime":1567,"recommend":1563,"references":1563,"seo":1572,"sitemap":1573,"stem":1574,"tags":1575,"type":1578,"updated":1559,"__hash__":1579},"content\u002Fposts\u002F2026\u002F08\u002Fflutter-macos-environment-setup.md","macOS 搭建 Flutter Android 与 iOS 开发环境",{"type":7,"value":8,"toc":1530},"minimark",[9,18,21,26,29,85,93,96,131,134,144,147,151,155,158,178,181,184,194,197,210,214,217,225,228,238,241,247,250,261,285,296,324,327,333,339,343,352,378,381,393,396,399,420,427,433,436,440,443,455,458,480,483,498,505,509,512,531,534,540,543,548,552,556,559,565,568,571,575,578,584,587,593,600,606,620,623,656,659,662,666,669,675,678,700,703,717,724,734,743,746,758,761,767,771,773,779,782,801,812,815,827,830,834,838,843,849,852,855,861,864,867,909,912,918,921,924,940,944,947,950,966,969,981,984,996,999,1011,1017,1021,1024,1083,1086,1089,1092,1098,1104,1107,1144,1150,1178,1180,1192,1195,1199,1202,1209,1212,1236,1239,1245,1248,1254,1257,1260,1268,1271,1277,1280,1284,1287,1309,1312,1327,1330,1340,1343,1355,1358,1375,1378,1424,1427,1430,1442,1445,1451,1454,1465,1468,1471,1526],[10,11,12,13,17],"p",{},"搭建 Flutter 开发环境不只是下载 Flutter SDK，还需要根据目标平台安装 Android SDK、Xcode、CocoaPods、模拟器等原生工具。第一次执行 ",[14,15,16],"code",{"code":16},"flutter doctor","，通常会看到 Android SDK、Xcode、CocoaPods 或代理相关的警告。",[10,19,20],{},"本文记录在 Apple Silicon Mac 上补齐 Flutter Android、iOS 和 Web 开发环境的完整过程。",[22,23,25],"h2",{"id":24},"flutter-各平台依赖关系","Flutter 各平台依赖关系",[10,27,28],{},"Flutter 项目的 Dart 代码可以使用 Android Studio、VS Code、Cursor 等编辑器编写，但不同目标平台仍然需要各自的原生工具链。",[30,31,32,48],"table",{},[33,34,35],"thead",{},[36,37,38,42,45],"tr",{},[39,40,41],"th",{},"目标平台",[39,43,44],{},"必需工具",[39,46,47],{},"主要作用",[49,50,51,63,74],"tbody",{},[36,52,53,57,60],{},[54,55,56],"td",{},"Android",[54,58,59],{},"Android Studio、Android SDK",[54,61,62],{},"编译、打包、模拟器和真机调试",[36,64,65,68,71],{},[54,66,67],{},"iOS\u002FmacOS",[54,69,70],{},"Xcode、CocoaPods",[54,72,73],{},"iOS SDK、模拟器、签名和原生插件依赖",[36,75,76,79,82],{},[54,77,78],{},"Web",[54,80,81],{},"Chrome",[54,83,84],{},"Web 调试和运行",[86,87,90],"alert",{"title":88,"type":89},"先确定目标平台","info",[10,91,92],{},"只开发 Android 或 Web 时，可以暂时不安装完整 Xcode 和 CocoaPods；只有需要构建 iOS\u002FmacOS 应用时才需要补齐苹果工具链。",[10,94,95],{},"整个环境搭建顺序如下：",[97,98,99,102,109,112,115,118,121,124],"timeline",{},[10,100,101],{},"{1. Flutter SDK}",[10,103,104,105,108],{},"下载 SDK、配置 ",[14,106,107],{"code":107},"PATH","，确认 Flutter 命令可用。",[10,110,111],{},"{2. Android 工具链}",[10,113,114],{},"安装 Android Studio、SDK、许可证和 ARM64 模拟器。",[10,116,117],{},"{3. iOS\u002FmacOS 工具链}",[10,119,120],{},"安装完整 Xcode、Simulator Runtime 和 CocoaPods。",[10,122,123],{},"{4. 环境验收}",[10,125,126,127,130],{},"通过 ",[14,128,129],{"code":129},"flutter doctor -v"," 检查，并运行一个示例项目。",[10,132,133],{},"项目中的目录关系如下：",[135,136,142],"pre",{"className":137,"code":139,"language":140,"meta":141},[138],"language-text","Flutter 项目\n├── android\u002F  → Android Studio、Android SDK\n├── ios\u002F      → Xcode、CocoaPods\n├── macos\u002F    → Xcode、CocoaPods\n├── web\u002F      → Chrome\n└── lib\u002F      → 多个平台共享的 Dart 代码\n","text","",[14,143,139],{"__ignoreMap":141},[10,145,146],{},"iOS 应用只能在 macOS 上通过 Xcode 编译。平时仍然可以在 VS Code 或 Android Studio 中编写 Flutter 代码，只有配置签名、Capabilities 或修改原生 Swift 代码时才需要打开 Xcode。",[22,148,150],{"id":149},"安装-flutter-sdk","安装 Flutter SDK",[152,153,154],"h3",{"id":154},"安装基础命令行工具",[10,156,157],{},"Flutter 在 macOS 上依赖 Git 等基础命令行工具。执行：",[135,159,163],{"className":160,"code":161,"language":162,"meta":141,"style":141},"language-bash shiki shiki-themes github-light github-dark","xcode-select --install\n","bash",[14,164,165],{"__ignoreMap":141},[166,167,170,174],"span",{"class":168,"data-line":169,"line":169},"line",1,[166,171,173],{"class":172},"sScJk","xcode-select",[166,175,177],{"class":176},"sj4cs"," --install\n",[10,179,180],{},"系统会弹出 Command Line Tools 安装窗口，按提示完成安装。",[10,182,183],{},"这里安装的是轻量的 Xcode 命令行工具，足以支持 Flutter SDK 和 Git。后面如果需要编译 iOS 或 macOS 应用，仍然要安装完整 Xcode。",[86,185,188],{"title":186,"type":187},"Command Line Tools 不等于完整 Xcode","warning",[10,189,190,193],{},[14,191,192],{"code":192},"xcode-select --install"," 只能安装基础命令行工具。它不能提供完整的 iOS SDK、模拟器和签名能力。",[10,195,196],{},"检查 Git：",[135,198,200],{"className":160,"code":199,"language":162,"meta":141,"style":141},"git --version\n",[14,201,202],{"__ignoreMap":141},[166,203,204,207],{"class":168,"data-line":169,"line":169},[166,205,206],{"class":172},"git",[166,208,209],{"class":176}," --version\n",[152,211,213],{"id":212},"下载-flutter-sdk","下载 Flutter SDK",[10,215,216],{},"打开 Flutter 官方手动安装页面：",[10,218,219],{},[220,221,222],"a",{"href":222,"rel":223},"https:\u002F\u002Fdocs.flutter.dev\u002Finstall\u002Fmanual",[224],"nofollow",[10,226,227],{},"根据 Mac 芯片选择正确的安装包：",[229,230,231,235],"ul",{},[232,233,234],"li",{},"M1、M2、M3、M4 等 Apple 芯片：选择 Apple Silicon（ARM64）。",[232,236,237],{},"Intel 芯片：选择 Intel（x64）。",[10,239,240],{},"可以通过下面的位置查看芯片类型：",[135,242,245],{"className":243,"code":244,"language":140,"meta":141},[138],"系统设置 → 通用 → 关于本机 → 芯片\n",[14,246,244],{"__ignoreMap":141},[10,248,249],{},"本文使用 Apple Silicon Mac，因此下载 ARM64 的 stable 稳定版 SDK。",[10,251,252,253,256,257,260],{},"不建议直接将 Flutter SDK 放在 ",[14,254,255],{"code":255},"Downloads","、",[14,258,259],{"code":259},"Desktop"," 或带空格、特殊字符的目录中。可以创建专门的开发工具目录：",[135,262,264],{"className":160,"code":263,"language":162,"meta":141,"style":141},"mkdir -p \"$HOME\u002Fdevelop\"\n",[14,265,266],{"__ignoreMap":141},[166,267,268,271,274,278,282],{"class":168,"data-line":169,"line":169},[166,269,270],{"class":172},"mkdir",[166,272,273],{"class":176}," -p",[166,275,277],{"class":276},"sZZnC"," \"",[166,279,281],{"class":280},"sVt8B","$HOME",[166,283,284],{"class":276},"\u002Fdevelop\"\n",[10,286,287,288,291,292,295],{},"假设安装包已经下载到 ",[14,289,290],{"code":290},"~\u002FDownloads","，解压到 ",[14,293,294],{"code":294},"~\u002Fdevelop","：",[135,297,299],{"className":160,"code":298,"language":162,"meta":141,"style":141},"unzip ~\u002FDownloads\u002Fflutter_macos_*-stable.zip -d \"$HOME\u002Fdevelop\"\n",[14,300,301],{"__ignoreMap":141},[166,302,303,306,309,312,315,318,320,322],{"class":168,"data-line":169,"line":169},[166,304,305],{"class":172},"unzip",[166,307,308],{"class":276}," ~\u002FDownloads\u002Fflutter_macos_",[166,310,311],{"class":176},"*",[166,313,314],{"class":276},"-stable.zip",[166,316,317],{"class":176}," -d",[166,319,277],{"class":276},[166,321,281],{"class":280},[166,323,284],{"class":276},[10,325,326],{},"解压后的目录结构类似：",[135,328,331],{"className":329,"code":330,"language":140,"meta":141},[138],"~\u002Fdevelop\u002Fflutter\n├── bin\n├── packages\n└── examples\n",[14,332,330],{"__ignoreMap":141},[10,334,335,336,338],{},"如果 ",[14,337,255],{"code":255}," 中存在多个 Flutter 压缩包，建议先删除旧版本，或者将命令中的通配符替换为实际文件名，避免一次解压多个文件。",[152,340,342],{"id":341},"配置-path","配置 PATH",[10,344,345,346,349,350,295],{},"macOS 默认使用 Zsh。将 Flutter 的 ",[14,347,348],{"code":348},"bin"," 目录加入 ",[14,351,107],{"code":107},[135,353,356],{"className":160,"code":354,"filename":355,"language":162,"meta":141,"style":141},"echo 'export PATH=\"$HOME\u002Fdevelop\u002Fflutter\u002Fbin:$PATH\"' >> ~\u002F.zprofile\n","~\u002F.zprofile",[14,357,358],{"__ignoreMap":141},[166,359,360,363,366,370,373,375],{"class":168,"data-line":169,"line":169},[166,361,362],{"class":176},"echo",[166,364,365],{"class":276}," 'export PATH=\"$HOME\u002Fdevelop\u002Fflutter\u002Fbin:$PATH\"'",[166,367,369],{"class":368},"szBVR"," ",[166,371,372],{"class":368},">",[166,374,372],{"class":368},[166,376,377],{"class":276}," ~\u002F.zprofile\n",[10,379,380],{},"重新加载配置：",[135,382,384],{"className":160,"code":383,"language":162,"meta":141,"style":141},"source ~\u002F.zprofile\n",[14,385,386],{"__ignoreMap":141},[166,387,388,391],{"class":168,"data-line":169,"line":169},[166,389,390],{"class":176},"source",[166,392,377],{"class":276},[10,394,395],{},"也可以关闭并重新打开终端。",[10,397,398],{},"验证命令路径：",[135,400,402],{"className":160,"code":401,"language":162,"meta":141,"style":141},"which flutter\nflutter --version\n",[14,403,404,412],{"__ignoreMap":141},[166,405,406,409],{"class":168,"data-line":169,"line":169},[166,407,408],{"class":176},"which",[166,410,411],{"class":276}," flutter\n",[166,413,415,418],{"class":168,"data-line":414,"line":414},2,[166,416,417],{"class":172},"flutter",[166,419,209],{"class":176},[10,421,422,423,426],{},"正常情况下，",[14,424,425],{"code":425},"which flutter"," 会输出：",[135,428,431],{"className":429,"code":430,"language":140,"meta":141},[138],"\u002FUsers\u002F你的用户名\u002Fdevelop\u002Fflutter\u002Fbin\u002Fflutter\n",[14,432,430],{"__ignoreMap":141},[10,434,435],{},"第一次执行 Flutter 命令时会下载 Dart SDK 和部分缓存文件，需要等待一段时间。",[152,437,439],{"id":438},"切换和升级-flutter-版本","切换和升级 Flutter 版本",[10,441,442],{},"查看当前发布渠道：",[135,444,446],{"className":160,"code":445,"language":162,"meta":141,"style":141},"flutter channel\n",[14,447,448],{"__ignoreMap":141},[166,449,450,452],{"class":168,"data-line":169,"line":169},[166,451,417],{"class":172},[166,453,454],{"class":276}," channel\n",[10,456,457],{},"个人学习和普通项目建议使用稳定版：",[135,459,461],{"className":160,"code":460,"language":162,"meta":141,"style":141},"flutter channel stable\nflutter upgrade\n",[14,462,463,473],{"__ignoreMap":141},[166,464,465,467,470],{"class":168,"data-line":169,"line":169},[166,466,417],{"class":172},[166,468,469],{"class":276}," channel",[166,471,472],{"class":276}," stable\n",[166,474,475,477],{"class":168,"data-line":414,"line":414},[166,476,417],{"class":172},[166,478,479],{"class":276}," upgrade\n",[10,481,482],{},"安装完成后执行一次全面检查：",[135,484,486],{"className":160,"code":485,"language":162,"meta":141,"style":141},"flutter doctor -v\n",[14,487,488],{"__ignoreMap":141},[166,489,490,492,495],{"class":168,"data-line":169,"line":169},[166,491,417],{"class":172},[166,493,494],{"class":276}," doctor",[166,496,497],{"class":176}," -v\n",[10,499,500,501,504],{},"此时 Flutter 本体应显示 ",[14,502,503],{"code":503},"[✓]","。Android 或 iOS 工具链出现警告属于正常情况，继续按照后面的步骤补齐即可。",[22,506,508],{"id":507},"检查-flutter-sdk","检查 Flutter SDK",[10,510,511],{},"先确认 Flutter 命令可以正常使用：",[135,513,515],{"className":160,"code":514,"language":162,"meta":141,"style":141},"flutter --version\nflutter doctor -v\n",[14,516,517,523],{"__ignoreMap":141},[166,518,519,521],{"class":168,"data-line":169,"line":169},[166,520,417],{"class":172},[166,522,209],{"class":176},[166,524,525,527,529],{"class":168,"data-line":414,"line":414},[166,526,417],{"class":172},[166,528,494],{"class":276},[166,530,497],{"class":176},[10,532,533],{},"例如：",[135,535,538],{"className":536,"code":537,"language":140,"meta":141},[138],"[✓] Flutter\n[✗] Android toolchain - develop for Android devices\n[!] Xcode - develop for iOS and macOS\n[✓] Chrome - develop for the web\n[✓] Connected device\n[✓] Network resources\n",[14,539,537],{"__ignoreMap":141},[10,541,542],{},"这表示 Flutter SDK 和 Web 环境已经可用，但 Android 与 iOS 的原生工具链还没有配置完整。",[10,544,545,547],{},[14,546,16],{"code":16}," 是整个安装过程最重要的检查工具。每完成一个阶段，都可以重新运行一次确认结果。",[22,549,551],{"id":550},"配置-android-开发环境","配置 Android 开发环境",[152,553,555],{"id":554},"安装-android-studio","安装 Android Studio",[10,557,558],{},"下载并安装 Android Studio：",[10,560,561],{},[220,562,563],{"href":563,"rel":564},"https:\u002F\u002Fdeveloper.android.com\u002Fstudio",[224],[10,566,567],{},"第一次打开 Android Studio 时，安装向导会下载 Android SDK。这里显示的 Android SDK 许可协议只是开发工具使用协议，不会产生费用。",[10,569,570],{},"首次安装需要从 Google 下载数百 MB 甚至更多组件，国内网络环境可能耗时较长。只要下载进度仍然变化，就继续等待，不要直接关闭 Android Studio。",[152,572,574],{"id":573},"安装-android-sdk-组件","安装 Android SDK 组件",[10,576,577],{},"打开 Android Studio：",[135,579,582],{"className":580,"code":581,"language":140,"meta":141},[138],"More Actions → SDK Manager\n",[14,583,581],{"__ignoreMap":141},[10,585,586],{},"也可以在已打开项目的情况下进入：",[135,588,591],{"className":589,"code":590,"language":140,"meta":141},[138],"Settings → Languages & Frameworks → Android SDK\n",[14,592,590],{"__ignoreMap":141},[10,594,595,596,599],{},"在 ",[14,597,598],{"code":598},"SDK Platforms"," 中至少安装一个需要使用的 Android SDK Platform。",[10,601,595,602,605],{},[14,603,604],{"code":604},"SDK Tools"," 中确认安装：",[229,607,608,611,614,617],{},[232,609,610],{},"Android SDK Command-line Tools (latest)",[232,612,613],{},"Android SDK Platform-Tools",[232,615,616],{},"Android SDK Build-Tools",[232,618,619],{},"Android Emulator",[10,621,622],{},"各组件用途如下：",[229,624,625,635,645,651],{},[232,626,627,630,631,634],{},[14,628,629],{"code":629},"Command-line Tools","：提供 ",[14,632,633],{"code":633},"sdkmanager"," 等命令，执行 Android 许可证检查时必需。",[232,636,637,640,641,644],{},[14,638,639],{"code":639},"Platform-Tools","：包含 ",[14,642,643],{"code":643},"adb","，用于连接真机、安装应用和调试。",[232,646,647,650],{},[14,648,649],{"code":649},"Build-Tools","：用于编译、打包和签名 Android 应用。",[232,652,653,655],{},[14,654,619],{"code":619},"：用于运行 Android 虚拟设备。",[10,657,658],{},"普通 Flutter 项目暂时不需要安装 NDK 和 CMake。只有项目包含 C\u002FC++ 原生代码或某些插件明确要求时再安装。",[10,660,661],{},"Android Sources 主要用于阅读系统源码，不是编译 Flutter 项目的必需组件。如果下载速度太慢，可以先取消 Sources，只保留核心工具。",[152,663,665],{"id":664},"配置-android-sdk-路径","配置 Android SDK 路径",[10,667,668],{},"macOS 默认的 Android SDK 目录通常是：",[135,670,673],{"className":671,"code":672,"language":140,"meta":141},[138],"\u002FUsers\u002F你的用户名\u002FLibrary\u002FAndroid\u002Fsdk\n",[14,674,672],{"__ignoreMap":141},[10,676,677],{},"可以让 Flutter 显式使用这个目录：",[135,679,681],{"className":160,"code":680,"language":162,"meta":141,"style":141},"flutter config --android-sdk \"$HOME\u002FLibrary\u002FAndroid\u002Fsdk\"\n",[14,682,683],{"__ignoreMap":141},[166,684,685,687,690,693,695,697],{"class":168,"data-line":169,"line":169},[166,686,417],{"class":172},[166,688,689],{"class":276}," config",[166,691,692],{"class":176}," --android-sdk",[166,694,277],{"class":276},[166,696,281],{"class":280},[166,698,699],{"class":276},"\u002FLibrary\u002FAndroid\u002Fsdk\"\n",[10,701,702],{},"接受 Android SDK 许可证：",[135,704,706],{"className":160,"code":705,"language":162,"meta":141,"style":141},"flutter doctor --android-licenses\n",[14,707,708],{"__ignoreMap":141},[166,709,710,712,714],{"class":168,"data-line":169,"line":169},[166,711,417],{"class":172},[166,713,494],{"class":276},[166,715,716],{"class":176}," --android-licenses\n",[10,718,719,720,723],{},"出现协议询问时输入 ",[14,721,722],{"code":722},"y"," 接受。",[86,725,727],{"title":726},"许可证不会收费",[10,728,729,730,733],{},"Android SDK 安装和 ",[14,731,732],{"code":732},"flutter doctor --android-licenses"," 显示的是开发工具使用协议。接受这些协议不会产生费用。",[10,735,736,737,739,740,742],{},"如果提示找不到 ",[14,738,633],{"code":633},"，通常是没有安装 ",[14,741,610],{"code":610},"。返回 SDK Manager 补装后再执行即可。",[10,744,745],{},"最后检查：",[135,747,748],{"className":160,"code":485,"language":162,"meta":141,"style":141},[14,749,750],{"__ignoreMap":141},[166,751,752,754,756],{"class":168,"data-line":169,"line":169},[166,753,417],{"class":172},[166,755,494],{"class":276},[166,757,497],{"class":176},[10,759,760],{},"出现下面的结果，说明 Android 工具链已经配置成功：",[135,762,765],{"className":763,"code":764,"language":140,"meta":141},[138],"[✓] Android toolchain - develop for Android devices\n",[14,766,764],{"__ignoreMap":141},[22,768,770],{"id":769},"创建-android-模拟器","创建 Android 模拟器",[10,772,577],{},[135,774,777],{"className":775,"code":776,"language":140,"meta":141},[138],"More Actions → Virtual Device Manager\n",[14,778,776],{"__ignoreMap":141},[10,780,781],{},"然后按以下步骤创建模拟器：",[783,784,785,792,795,798],"ol",{},[232,786,787,788,791],{},"点击 ",[14,789,790],{"code":790},"+"," 创建虚拟设备。",[232,793,794],{},"选择 Pixel 等常用机型。",[232,796,797],{},"下载并选择 Android 系统镜像。",[232,799,800],{},"完成创建并点击启动按钮。",[10,802,803,804,807,808,811],{},"Apple Silicon Mac 应优先选择 ",[14,805,806],{"code":806},"ARM64"," 或 ",[14,809,810],{"code":810},"arm64-v8a"," 系统镜像。使用与 CPU 架构一致的镜像，启动速度和运行效率通常更好。",[10,813,814],{},"查看 Flutter 已识别的设备：",[135,816,818],{"className":160,"code":817,"language":162,"meta":141,"style":141},"flutter devices\n",[14,819,820],{"__ignoreMap":141},[166,821,822,824],{"class":168,"data-line":169,"line":169},[166,823,417],{"class":172},[166,825,826],{"class":276}," devices\n",[10,828,829],{},"也可以连接 Android 真机。需要在手机的开发者选项中开启 USB 调试，并在首次连接时允许当前电脑进行调试。",[22,831,833],{"id":832},"配置-ios-和-macos-开发环境","配置 iOS 和 macOS 开发环境",[152,835,837],{"id":836},"安装完整-xcode","安装完整 Xcode",[10,839,335,840,842],{},[14,841,16],{"code":16}," 显示：",[135,844,847],{"className":845,"code":846,"language":140,"meta":141},[138],"Xcode installation is incomplete; a full installation is necessary\n",[14,848,846],{"__ignoreMap":141},[10,850,851],{},"说明当前可能只有 Xcode Command Line Tools，或者 Xcode 尚未完成初始化。开发 iOS 和 macOS 应用需要安装完整 Xcode。",[10,853,854],{},"可以直接在 Mac App Store 搜索并安装 Xcode，也可以从 Apple Developer 网站下载：",[10,856,857],{},[220,858,859],{"href":859,"rel":860},"https:\u002F\u002Fdeveloper.apple.com\u002Fxcode\u002F",[224],[10,862,863],{},"Xcode 本身免费。安装包和模拟器运行时占用空间较大，建议提前预留 30～50 GB 磁盘空间。",[10,865,866],{},"安装完成后先手动打开 Xcode 一次，接受协议并等待附加组件安装完成，然后执行：",[135,868,870],{"className":160,"code":869,"language":162,"meta":141,"style":141},"sudo xcode-select --switch \u002FApplications\u002FXcode.app\u002FContents\u002FDeveloper\nsudo xcodebuild -runFirstLaunch\nsudo xcodebuild -license accept\n",[14,871,872,886,896],{"__ignoreMap":141},[166,873,874,877,880,883],{"class":168,"data-line":169,"line":169},[166,875,876],{"class":172},"sudo",[166,878,879],{"class":276}," xcode-select",[166,881,882],{"class":176}," --switch",[166,884,885],{"class":276}," \u002FApplications\u002FXcode.app\u002FContents\u002FDeveloper\n",[166,887,888,890,893],{"class":168,"data-line":414,"line":414},[166,889,876],{"class":172},[166,891,892],{"class":276}," xcodebuild",[166,894,895],{"class":176}," -runFirstLaunch\n",[166,897,899,901,903,906],{"class":168,"data-line":898,"line":898},3,[166,900,876],{"class":172},[166,902,892],{"class":276},[166,904,905],{"class":176}," -license",[166,907,908],{"class":276}," accept\n",[10,910,911],{},"如果需要 iOS 模拟器，可以在 Xcode 中打开：",[135,913,916],{"className":914,"code":915,"language":140,"meta":141},[138],"Xcode → Settings → Components\n",[14,917,915],{"__ignoreMap":141},[10,919,920],{},"下载需要使用的 iOS Simulator Runtime。",[10,922,923],{},"启动模拟器：",[135,925,927],{"className":160,"code":926,"language":162,"meta":141,"style":141},"open -a Simulator\n",[14,928,929],{"__ignoreMap":141},[166,930,931,934,937],{"class":168,"data-line":169,"line":169},[166,932,933],{"class":172},"open",[166,935,936],{"class":176}," -a",[166,938,939],{"class":276}," Simulator\n",[152,941,943],{"id":942},"安装-cocoapods","安装 CocoaPods",[10,945,946],{},"CocoaPods 用于管理 Flutter 插件依赖的 iOS\u002FmacOS 原生库。没有 CocoaPods 时，部分插件无法在 iOS 或 macOS 上编译。",[10,948,949],{},"通过 Homebrew 安装：",[135,951,953],{"className":160,"code":952,"language":162,"meta":141,"style":141},"brew install cocoapods\n",[14,954,955],{"__ignoreMap":141},[166,956,957,960,963],{"class":168,"data-line":169,"line":169},[166,958,959],{"class":172},"brew",[166,961,962],{"class":276}," install",[166,964,965],{"class":276}," cocoapods\n",[10,967,968],{},"检查版本：",[135,970,972],{"className":160,"code":971,"language":162,"meta":141,"style":141},"pod --version\n",[14,973,974],{"__ignoreMap":141},[166,975,976,979],{"class":168,"data-line":169,"line":169},[166,977,978],{"class":172},"pod",[166,980,209],{"class":176},[10,982,983],{},"必要时初始化本地 Specs 仓库：",[135,985,987],{"className":160,"code":986,"language":162,"meta":141,"style":141},"pod setup\n",[14,988,989],{"__ignoreMap":141},[166,990,991,993],{"class":168,"data-line":169,"line":169},[166,992,978],{"class":172},[166,994,995],{"class":276}," setup\n",[10,997,998],{},"再次检查 Flutter 环境：",[135,1000,1001],{"className":160,"code":485,"language":162,"meta":141,"style":141},[14,1002,1003],{"__ignoreMap":141},[166,1004,1005,1007,1009],{"class":168,"data-line":169,"line":169},[166,1006,417],{"class":172},[166,1008,494],{"class":276},[166,1010,497],{"class":176},[10,1012,1013,1014,1016],{},"当 Xcode 一项变成 ",[14,1015,503],{"code":503},"，iOS 与 macOS 的基础开发环境就配置完成了。",[22,1018,1020],{"id":1019},"xcode-和-apple-开发者账号是否收费","Xcode 和 Apple 开发者账号是否收费",[10,1022,1023],{},"Xcode、iOS 模拟器和本地开发都是免费的。是否收费主要取决于应用是否需要正式分发。",[30,1025,1026,1036],{},[33,1027,1028],{},[36,1029,1030,1033],{},[39,1031,1032],{},"使用场景",[39,1034,1035],{},"免费 Apple 账号",[49,1037,1038,1046,1053,1061,1069,1076],{},[36,1039,1040,1043],{},[54,1041,1042],{},"学习 Flutter\u002FiOS",[54,1044,1045],{},"可以",[36,1047,1048,1051],{},[54,1049,1050],{},"使用 iOS 模拟器",[54,1052,1045],{},[36,1054,1055,1058],{},[54,1056,1057],{},"在自己的 iPhone 上真机调试",[54,1059,1060],{},"可以，但签名有效期和数量有限制",[36,1062,1063,1066],{},[54,1064,1065],{},"发布到 App Store",[54,1067,1068],{},"不可以",[36,1070,1071,1074],{},[54,1072,1073],{},"使用 TestFlight 分发",[54,1075,1068],{},[36,1077,1078,1081],{},[54,1079,1080],{},"正式证书和长期分发",[54,1082,1068],{},[10,1084,1085],{},"发布 App Store 或使用 TestFlight，需要加入 Apple Developer Program。苹果通常按年收取会员费，具体价格以 Apple Developer 官方页面显示为准。",[10,1087,1088],{},"如果目前只学习 Flutter 或在自己的设备上调试，不需要立即付费。",[22,1090,1091],{"id":1091},"处理代理警告",[10,1093,1094,1095,1097],{},"开启 Clash、V2Ray 等代理软件后，",[14,1096,16],{"code":16}," 可能提示：",[135,1099,1102],{"className":1100,"code":1101,"language":140,"meta":141},[138],"[!] Proxy Configuration\n    ! NO_PROXY is not set\n",[14,1103,1101],{"__ignoreMap":141},[10,1105,1106],{},"可以将本地地址排除在代理之外：",[135,1108,1110],{"className":160,"code":1109,"language":162,"meta":141,"style":141},"export NO_PROXY=\"localhost,127.0.0.1,::1\"\nexport no_proxy=\"$NO_PROXY\"\n",[14,1111,1112,1126],{"__ignoreMap":141},[166,1113,1114,1117,1120,1123],{"class":168,"data-line":169,"line":169},[166,1115,1116],{"class":368},"export",[166,1118,1119],{"class":280}," NO_PROXY",[166,1121,1122],{"class":368},"=",[166,1124,1125],{"class":276},"\"localhost,127.0.0.1,::1\"\n",[166,1127,1128,1130,1133,1135,1138,1141],{"class":168,"data-line":414,"line":414},[166,1129,1116],{"class":368},[166,1131,1132],{"class":280}," no_proxy",[166,1134,1122],{"class":368},[166,1136,1137],{"class":276},"\"",[166,1139,1140],{"class":280},"$NO_PROXY",[166,1142,1143],{"class":276},"\"\n",[10,1145,1146,1147,295],{},"需要永久生效时，将配置加入 ",[14,1148,1149],{"code":1149},"~\u002F.zshrc",[135,1151,1152],{"className":160,"code":1109,"filename":1149,"language":162,"meta":141,"style":141},[14,1153,1154,1164],{"__ignoreMap":141},[166,1155,1156,1158,1160,1162],{"class":168,"data-line":169,"line":169},[166,1157,1116],{"class":368},[166,1159,1119],{"class":280},[166,1161,1122],{"class":368},[166,1163,1125],{"class":276},[166,1165,1166,1168,1170,1172,1174,1176],{"class":168,"data-line":414,"line":414},[166,1167,1116],{"class":368},[166,1169,1132],{"class":280},[166,1171,1122],{"class":368},[166,1173,1137],{"class":276},[166,1175,1140],{"class":280},[166,1177,1143],{"class":276},[10,1179,380],{},[135,1181,1183],{"className":160,"code":1182,"language":162,"meta":141,"style":141},"source ~\u002F.zshrc\n",[14,1184,1185],{"__ignoreMap":141},[166,1186,1187,1189],{"class":168,"data-line":169,"line":169},[166,1188,390],{"class":176},[166,1190,1191],{"class":276}," ~\u002F.zshrc\n",[10,1193,1194],{},"如果 Flutter 依赖可以正常下载，这个警告一般不会阻止开发，也可以暂时忽略。",[22,1196,1198],{"id":1197},"app-store-无法下载-xcode","App Store 无法下载 Xcode",[10,1200,1201],{},"如果 App Store 可以打开 Xcode 页面，但点击“获取”时提示无法建立安全连接，通常与系统代理或代理节点的 TLS 处理有关。",[86,1203,1206],{"title":1204,"type":1205},"优先检查系统代理","error",[10,1207,1208],{},"App Store 的下载页面可能可以正常访问，但“获取”接口的 TLS 校验更严格。代理节点或 HTTPS 检查可能导致安全连接失败。",[10,1210,1211],{},"可以按以下顺序排查：",[783,1213,1214,1221,1224,1227,1230,1233],{},[232,1215,1216,1217,1220],{},"使用 ",[14,1218,1219],{"code":1219},"Command + Q"," 完全退出 App Store。",[232,1222,1223],{},"暂时关闭代理软件的系统代理，或者直接退出代理软件。",[232,1225,1226],{},"重新打开 App Store 并再次点击获取。",[232,1228,1229],{},"如果仍然失败，切换到手机热点重试。",[232,1231,1232],{},"检查系统是否开启自动设置日期和时间。",[232,1234,1235],{},"退出 App Store 的 Apple ID 后重新登录。",[10,1237,1238],{},"如果必须使用代理，可以考虑让 Apple 相关域名直连：",[135,1240,1243],{"className":1241,"code":1242,"language":140,"meta":141},[138],"*.apple.com\n*.apps.apple.com\n*.itunes.apple.com\n*.icloud.com\n*.mzstatic.com\n",[14,1244,1242],{"__ignoreMap":141},[10,1246,1247],{},"也可以绕过 App Store，从 Apple Developer Downloads 下载 Xcode：",[10,1249,1250],{},[220,1251,1252],{"href":1252,"rel":1253},"https:\u002F\u002Fdeveloper.apple.com\u002Fdownload\u002Fall\u002F",[224],[22,1255,1256],{"id":1256},"配置编辑器",[10,1258,1259],{},"Android Studio 用户可以在插件市场安装：",[229,1261,1262,1265],{},[232,1263,1264],{},"Flutter",[232,1266,1267],{},"Dart",[10,1269,1270],{},"VS Code 用户可以安装官方 Flutter 扩展，Dart 扩展会作为依赖一同安装：",[10,1272,1273],{},[220,1274,1275],{"href":1275,"rel":1276},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=Dart-Code.flutter",[224],[10,1278,1279],{},"编辑器只是代码编写入口。即使使用 VS Code，构建 Android 仍然需要 Android SDK，构建 iOS 仍然需要 Xcode。",[22,1281,1283],{"id":1282},"创建并运行-flutter-项目","创建并运行 Flutter 项目",[10,1285,1286],{},"创建新项目：",[135,1288,1290],{"className":160,"code":1289,"language":162,"meta":141,"style":141},"flutter create flutter_demo\ncd flutter_demo\n",[14,1291,1292,1302],{"__ignoreMap":141},[166,1293,1294,1296,1299],{"class":168,"data-line":169,"line":169},[166,1295,417],{"class":172},[166,1297,1298],{"class":276}," create",[166,1300,1301],{"class":276}," flutter_demo\n",[166,1303,1304,1307],{"class":168,"data-line":414,"line":414},[166,1305,1306],{"class":176},"cd",[166,1308,1301],{"class":276},[10,1310,1311],{},"安装依赖：",[135,1313,1315],{"className":160,"code":1314,"language":162,"meta":141,"style":141},"flutter pub get\n",[14,1316,1317],{"__ignoreMap":141},[166,1318,1319,1321,1324],{"class":168,"data-line":169,"line":169},[166,1320,417],{"class":172},[166,1322,1323],{"class":276}," pub",[166,1325,1326],{"class":276}," get\n",[10,1328,1329],{},"查看设备：",[135,1331,1332],{"className":160,"code":817,"language":162,"meta":141,"style":141},[14,1333,1334],{"__ignoreMap":141},[166,1335,1336,1338],{"class":168,"data-line":169,"line":169},[166,1337,417],{"class":172},[166,1339,826],{"class":276},[10,1341,1342],{},"运行项目：",[135,1344,1346],{"className":160,"code":1345,"language":162,"meta":141,"style":141},"flutter run\n",[14,1347,1348],{"__ignoreMap":141},[166,1349,1350,1352],{"class":168,"data-line":169,"line":169},[166,1351,417],{"class":172},[166,1353,1354],{"class":276}," run\n",[10,1356,1357],{},"设备较多时，可以通过设备 ID 指定目标：",[135,1359,1361],{"className":160,"code":1360,"language":162,"meta":141,"style":141},"flutter run -d 设备ID\n",[14,1362,1363],{"__ignoreMap":141},[166,1364,1365,1367,1370,1372],{"class":168,"data-line":169,"line":169},[166,1366,417],{"class":172},[166,1368,1369],{"class":276}," run",[166,1371,317],{"class":176},[166,1373,1374],{"class":276}," 设备ID\n",[10,1376,1377],{},"常见目标包括：",[135,1379,1381],{"className":160,"code":1380,"language":162,"meta":141,"style":141},"# Chrome\nflutter run -d chrome\n\n# macOS 桌面端\nflutter run -d macos\n",[14,1382,1383,1389,1400,1406,1412],{"__ignoreMap":141},[166,1384,1385],{"class":168,"data-line":169,"line":169},[166,1386,1388],{"class":1387},"sJ8bj","# Chrome\n",[166,1390,1391,1393,1395,1397],{"class":168,"data-line":414,"line":414},[166,1392,417],{"class":172},[166,1394,1369],{"class":276},[166,1396,317],{"class":176},[166,1398,1399],{"class":276}," chrome\n",[166,1401,1402],{"class":168,"data-line":898,"line":898},[166,1403,1405],{"emptyLinePlaceholder":1404},true,"\n",[166,1407,1409],{"class":168,"data-line":1408,"line":1408},4,[166,1410,1411],{"class":1387},"# macOS 桌面端\n",[166,1413,1415,1417,1419,1421],{"class":168,"data-line":1414,"line":1414},5,[166,1416,417],{"class":172},[166,1418,1369],{"class":276},[166,1420,317],{"class":176},[166,1422,1423],{"class":276}," macos\n",[22,1425,1426],{"id":1426},"最终检查",[10,1428,1429],{},"完整环境可以使用下面的命令验收：",[135,1431,1432],{"className":160,"code":485,"language":162,"meta":141,"style":141},[14,1433,1434],{"__ignoreMap":141},[166,1435,1436,1438,1440],{"class":168,"data-line":169,"line":169},[166,1437,417],{"class":172},[166,1439,494],{"class":276},[166,1441,497],{"class":176},[10,1443,1444],{},"目标结果如下：",[135,1446,1449],{"className":1447,"code":1448,"language":140,"meta":141},[138],"[✓] Flutter\n[✓] Android toolchain\n[✓] Xcode\n[✓] Chrome\n[✓] Connected device\n[✓] Network resources\n",[14,1450,1448],{"__ignoreMap":141},[10,1452,1453],{},"不必为了所有勾选项一次性安装全部工具：",[229,1455,1456,1459,1462],{},[232,1457,1458],{},"只开发 Android：Android toolchain 变绿后即可开始。",[232,1460,1461],{},"只开发 Web：Flutter 和 Chrome 正常即可。",[232,1463,1464],{},"开发 iOS\u002FmacOS：必须补齐完整 Xcode 和 CocoaPods。",[10,1466,1467],{},"根据实际目标平台安装依赖，可以减少磁盘占用和不必要的配置工作。",[22,1469,1470],{"id":1470},"参考资料",[229,1472,1473,1479,1486,1493,1500,1507,1513,1519],{},[232,1474,1475,1476],{},"Flutter SDK 手动安装：",[220,1477,222],{"href":222,"rel":1478},[224],[232,1480,1481,1482],{},"Flutter Android 环境配置：",[220,1483,1484],{"href":1484,"rel":1485},"https:\u002F\u002Fdocs.flutter.dev\u002Fplatform-integration\u002Fandroid\u002Fsetup",[224],[232,1487,1488,1489],{},"Flutter iOS 环境配置：",[220,1490,1491],{"href":1491,"rel":1492},"https:\u002F\u002Fdocs.flutter.dev\u002Fplatform-integration\u002Fios\u002Fsetup",[224],[232,1494,1495,1496],{},"Flutter Android Studio 配置：",[220,1497,1498],{"href":1498,"rel":1499},"https:\u002F\u002Fdocs.flutter.dev\u002Ftools\u002Fandroid-studio",[224],[232,1501,1502,1503],{},"Flutter VS Code 配置：",[220,1504,1505],{"href":1505,"rel":1506},"https:\u002F\u002Fdocs.flutter.dev\u002Ftools\u002Fvs-code",[224],[232,1508,1509,1510],{},"Android Studio：",[220,1511,563],{"href":563,"rel":1512},[224],[232,1514,1515,1516],{},"Xcode：",[220,1517,859],{"href":859,"rel":1518},[224],[232,1520,1521,1522],{},"CocoaPods：",[220,1523,1524],{"href":1524,"rel":1525},"https:\u002F\u002Fguides.cocoapods.org\u002Fusing\u002Fgetting-started.html",[224],[1527,1528,1529],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":141,"searchDepth":1408,"depth":1408,"links":1531},[1532,1533,1539,1540,1545,1546,1550,1551,1552,1553,1554,1555,1556],{"id":24,"depth":414,"text":25},{"id":149,"depth":414,"text":150,"children":1534},[1535,1536,1537,1538],{"id":154,"depth":898,"text":154},{"id":212,"depth":898,"text":213},{"id":341,"depth":898,"text":342},{"id":438,"depth":898,"text":439},{"id":507,"depth":414,"text":508},{"id":550,"depth":414,"text":551,"children":1541},[1542,1543,1544],{"id":554,"depth":898,"text":555},{"id":573,"depth":898,"text":574},{"id":664,"depth":898,"text":665},{"id":769,"depth":414,"text":770},{"id":832,"depth":414,"text":833,"children":1547},[1548,1549],{"id":836,"depth":898,"text":837},{"id":942,"depth":898,"text":943},{"id":1019,"depth":414,"text":1020},{"id":1091,"depth":414,"text":1091},{"id":1197,"depth":414,"text":1198},{"id":1256,"depth":414,"text":1256},{"id":1282,"depth":414,"text":1283},{"id":1426,"depth":414,"text":1426},{"id":1470,"depth":414,"text":1470},[1558],"移动开发","2026-08-02","记录在 Apple Silicon Mac 上搭建 Flutter 开发环境的完整过程，包括 Android Studio、Android SDK、模拟器、Xcode、CocoaPods、代理配置以及 flutter doctor 常见问题。",false,"md",null,{"slots":1565},{},"\u002F2026\u002F08\u002Fflutter-macos-environment-setup",{"text":1568,"minutes":1569,"time":1570,"words":1571},"14 min read",13.925,835500,2785,{"title":5,"description":1560},{"loc":1566},"posts\u002F2026\u002F08\u002Fflutter-macos-environment-setup",[1264,56,1576,1577],"iOS","macOS","tech","QglgUGgO3XyRa6TG_JkkzuVxF-4wceNSm-27GGatRzg",[1581,1586],{"title":1582,"path":1583,"stem":1584,"date":1585,"type":1578,"children":-1},"使用 Fluent Bit 将 Kubernetes 日志采集到 ELK","\u002F2026\u002F07\u002Fk8s-logs-to-elk-with-fluent-bit","posts\u002F2026\u002F07\u002Fk8s-logs-to-elk-with-fluent-bit","2026-07-29",{"title":1587,"path":1588,"stem":1589,"date":1590,"type":1578,"children":-1},"macOS 使用华为手机调试 Flutter：ADB 设备为空排查","\u002F2026\u002F08\u002Fflutter-huawei-usb-device-debugging","posts\u002F2026\u002F08\u002Fflutter-huawei-usb-device-debugging","2026-08-04",1786555052636]