分类 开发笔记 下的文章

macOS 对开发者相当友好,系统内置了 Apache 和 PHP,只需简单配置即可使用。再配合 MySQL 的安装,就能快速搭建一套完整的本地开发环境。以下是具体步骤。

一、Apache 服务器配置

Apache 的配置文件位于 /private/etc/apache2/httpd.conf。由于后续需要修改该文件,建议先复制一份副本作为备份,以便在配置出错时恢复。

启动 PHP 服务

PHP 服务默认是关闭的。用文本编辑器打开 httpd.conf,搜索 php 关键词,会找到一行包含 php 字样的代码。该行前面的 # 表示注释,删掉 # 即可启用 PHP 服务。

修改网站根目录

默认的网站目录是 /Library/WebServer/Documents。在配置文件中搜索 DocumentRoot,可以看到默认的目录地址。建议改为 /Users/你的用户名/Sites。

具体操作:在用户目录下新建一个名为 Sites 的文件夹(该文件夹会自动显示指南针图标),然后在配置文件中修改两处根目录地址,保存后重启 Apache 即可生效。

启动与关闭 Apache

开启命令:sudo apachectl start
重启命令:sudo apachectl restart
关闭命令:sudo apachectl stop

启动后,在浏览器中输入 127.0.0.1 或本机 IP 地址进行验证。若显示 "It works",说明配置成功。如果手机与电脑在同一网络下,也可以在手机浏览器中输入电脑 IP 访问。

若出现 "forbidden",可能是因为新根目录为空,可将 /Library/WebServer/Documents 中的文件复制到新根目录下。

二、PHP 配置

创建 php.ini 文件

最新版本的 macOS 默认不创建 php.ini 文件,但在 /private/etc 目录下包含一个 php.ini.default 文件。将其复制并重命名为 php.ini 即可:

sudo cp /private/etc/php.ini.default /private/etc/php.ini

三、安装 MySQL

macOS 内置了 PHP 和 Apache,要组成完整的开发环境还需要 MySQL。安装方法很简单:前往 https://dev.mysql.com/downloads/mysql/ 下载 dmg 镜像,进行可视化安装。安装完成后,在系统偏好设置中即可控制 MySQL 的启动和关闭。

四、文件夹写入权限配置

将网站路径更改为 /Users/xxx/Sites 后运行 PHP 程序,可能会遇到没有写入权限或报错的情况。此时在终端中执行以下命令,即可让 PHP 拥有写文件权限:

sudo chmod -R 777 /Users/xxx/Sites/

五、常见问题:Cannot modify header information

在安装某些程序(如 Typecho)时,macOS 的 PHP 可能会报错:

PHP:Cannot modify header information - headers already sent by

解决方法是修改 php.ini 中的 output_buffering 配置项,将其设置为 On,然后重启电脑即可解决。


按照以上步骤配置完成后,你就拥有了一套完整的本地开发环境,可以开始测试自己的 Web 项目了。

Flutter 应用的版本号是在 pubspec.yaml 文件中的 version 字段定义。

更新步骤

  1. 在 pubspec.yaml 文件顶部找到 version: A.B.C+X 这一行,修改对应的数字。

    • A.B.C:用户可见的版本号(如 1.2.0),对应 Android 的 versionName 和 iOS 的 CFBundleShortVersionString。
    • +X:构建号(如 +5),必须是递增的正整数。对应 Android 的 versionCode 和 iOS 的 CFBundleVersion。每次提交到应用商店,这个构建号必须增加,否则会被拒绝。
  2. 修改后,在项目根目录运行以下命令同步依赖,让 Flutter 重新获取配置:

    flutter pub get

    执行后,相关平台的原生工程文件会自动更新。

自动化工具

如果觉得手动改容易漏,可以使用社区工具 flutter_deploy。它能一条命令自动递增构建号,并同步更新 iOS 的 Info.plist 等原生文件。

# 自动递增构建号并同步 iOS 文件
flutter_deploy --bump

注意

  • 应用商店通常只接受比线上版本更高的构建号,建议每次发布前都检查一下。
  • 构建时也可以通过 --build-name 和 --build-number 参数临时覆盖版本号,但主要用于 CI 环境。