Skip to content

Commit

Permalink
Merge pull request #9809 from keymanapp/docs/macos-build-notes
Browse files Browse the repository at this point in the history
docs(common): macos build update
  • Loading branch information
mcdurdin authored Oct 20, 2023
2 parents 6047a2c + 14e7855 commit c287644
Showing 1 changed file with 74 additions and 56 deletions.
130 changes: 74 additions & 56 deletions docs/build/macos.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# Setup your Keyman build environment on macOS

This document describes prerequisites and tools required for building various Keyman projects on macOS. Each project will also have additional notes linked below.
This document describes prerequisites and tools required for building various
Keyman projects on macOS. Each project will also have additional notes linked
below.

## Target Projects

Expand All @@ -10,6 +12,7 @@ On macOS, you can build the following projects:
* Keyman for iOS ([additional details](../../ios/README.md))
* Keyman for macOS ([additional details](../../mac/README.md))
* KeymanWeb ([additional details](../../web/README.md))
* Keyman Developer Command Line Tools (kmc)

The following libraries can also be built:

Expand All @@ -20,19 +23,24 @@ The following projects **cannot** be built on macOS:

* Keyman for Linux
* Keyman for Windows
* Keyman Developer
* Keyman Developer (IDE component)

## System Requirements

* Minimum macOS version: macOS Catalina 10.15 or Big Sur 11.0

**Note:** to make a fully M1-compatible release build of Keyman for macOS (for the setup Applescript), Big Sur 11.0 is required, as osacompile on earlier versions does not build for arm64 (M1). The build will still work on earlier versions, but the installer won't be able to run on M1 Macs that do not have Rosetta 2 installed.
**Note:** to make a fully M1-compatible release build of Keyman for macOS (for
the setup Applescript), Big Sur 11.0 is required, as osacompile on earlier
versions does not build for arm64 (M1). The build will still work on earlier
versions, but the installer won't be able to run on M1 Macs that do not have
Rosetta 2 installed.

## Prerequisites

Many dependencies are only required for specific projects.

* XCode (iOS, macOS) 12.4 or later
* XCode (iOS, macOS) 12.4 or later is needed only for Keyman for macOS and Keyman
for iOS.
* Install from App Store
* Accept the Xcode license: `sudo xcodebuild -license accept`

Expand All @@ -48,73 +56,83 @@ These dependencies are also listed below if you'd prefer to install manually.

## Shared Dependencies

* Shared: HomeBrew, Bash 5.0+, jq, Python 2.7, Python 3, Meson, Ninja, coreutils, Pandoc
* HomeBrew, Bash 5.0+, jq, Python 2.7, Python 3, Meson, Ninja, coreutils, Pandoc

```shell
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install bash jq python3 meson ninja coreutils pandoc pyenv
# Python 2.7 required for DeviceKit (among others?) at present
pyenv install 2.7.18
pyenv global 2.7.18
echo 'eval "$(pyenv init --path)"' >> ~/.bash_profile
```
```shell
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install bash jq python3 meson ninja coreutils pandoc pyenv
# Python 2.7 required for DeviceKit (among others?) at present
pyenv install 2.7.18
pyenv global 2.7.18
echo 'eval "$(pyenv init --path)"' >> ~/.bash_profile
```

On macOS, you will need to adjust your PATH so that coreutils’ `realpath` takes precedence over the BSD one:
On macOS, you will need to adjust your PATH so that coreutils’ `realpath` takes
precedence over the BSD one:

```shell
# Credit: brew info coreutils
PATH="$HOMEBREW_PREFIX/opt/coreutils/libexec/gnubin:$PATH"
```
```shell
# Credit: brew info coreutils
PATH="$HOMEBREW_PREFIX/opt/coreutils/libexec/gnubin:$PATH"
```

* Web: node.js 18+, emscripten, openjdk 8
## KeymanWeb Dependencies

```shell
brew install node emscripten openjdk@8
```
* node.js 18+, emscripten, openjdk 8

Note: if you install emscripten with brew on macOS, only emscripten binaries
are added to the path via symlinks. This makes it reasonably safe to have
emscripten on the path, unlike on other platforms where emscripten also ends
up adding its versions of node, python, and other binaries to the path.
```shell
brew install node emscripten openjdk@8
```

* iOS: swiftlint, carthage
Note: if you install emscripten with brew on macOS, only emscripten binaries are
added to the path via symlinks. This makes it reasonably safe to have emscripten
on the path, unlike on other platforms where emscripten also ends up adding its
versions of node, python, and other binaries to the path.

```shell
brew install swiftlint carthage
```
## Keyman for iOS Dependencies

* macOS: carthage, cocoapods
* XCode, swiftlint, carthage

```shell
brew install carthage cocoapods
```
```shell
brew install swiftlint carthage
```

* Android: openjdk 8, Android SDK, Android Studio, Ant, Gradle, Maven
## Keyman for Mac Dependencies

```shell
brew install openjdk@8 android-sdk android-studio ant gradle maven
# update path
source ../resources/devbox/macos/keyman.macos.env.sh
# optionally install sdk images
sdkmanager "system-images;android-30;google_apis;armeabi-v7a"
sdkmanager --update
sdkmanager --licenses
```
* XCode, carthage, cocoapods

* kmc (optional): node
- Required to build keyboards using kmc
```shell
brew install carthage cocoapods
```

```bash
brew tap homebrew/cask-versions
brew install --cask --no-quarantine wine-stable
```
## Keyman for Android Dependencies

* sentry-cli (optional)
- Uploading symbols for Sentry-based error reporting
* openjdk 11, Android SDK, Android Studio, Ant, Gradle, Maven

```
```shell
brew install openjdk@11 android-sdk android-studio ant gradle maven
# update path
source ../resources/devbox/macos/keyman.macos.env.sh
# optionally install sdk images
sdkmanager "system-images;android-30;google_apis;armeabi-v7a"
sdkmanager --update
sdkmanager --licenses
```

* Note: Run Android Studio once after installation to install additional
components such as emulator images and SDK updates.

## Keyman Developer Command Line (kmc)

* node.js, emscripten

```shell
brew install node emscripten
```

## Optional Tools

* sentry-cli: Uploading symbols for Sentry-based error reporting

```shell
brew install getsentry/tools/sentry-cli
```

* Run Android Studio once after installation to install additional components
such as emulator images and SDK updates.

0 comments on commit c287644

Please sign in to comment.