오늘은 지난 번에 iPhone에 Theos를 설정한 것과 달리 WSL에서도 설정을 하는 것을 목표로 하겠습니다. 원래는 18.04 환경에서 진행을 하려고 했으나 이미 제가 사용하고 있는 관계로 20 버전에서 세팅합니다.
현재 다음의 환경에서 진행하고 있습니다.

WSL 설치하기
먼저 시작하기 전에 Powershell을 관리자 권한으로 열고 다음 명령을 실행하여 장치에서 WSL을 활성화해야 합니다.
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
그리고 Microsoft Store에서 원하는 버전을 설치해주세요. 원래는 18.04 LTS 버전을 사용하려고 했으나 이미 제가 실사용 중에 있는 관계로 이 글에서는 20.04 LTS 버전을 사용합니다. 18.04 LTS의 경우에도 모든 과정이 동일합니다. 오히려 20.04 LTS에서 몇 가지 더 할게 있습니다.

사용자 설정
설치가 완료되고 앱을 열면 자연스럽게 Windows 내에 설치가 진행되고 첫 번째 사용자를 설정하게 됩니다.

미러 서버 변경 및 업데이트 설치
여기에서는 빠른 시스템 업데이트를 위해 미러 서버를 DaumKakao로 변경할 것입니다. sed
명령을 사용해 source.list
파일을 업데이트해줍니다.
sudo sed -i 's/archive.ubuntu.com/mirror.kakao.com/' /etc/apt/sources.list
그리고 시스템 업데이트해주세요.
sudo apt update
sudo apt upgrade -y
파일 시스템 구성 변경
그 다음으로 기본적으로 WSL에서 허용하지 않는 파일 시스템 옵션들을 직접 활성화해야 합니다. /etc/wsl.conf
를 열고 metadata와 umask 등의 옵션을 활성화해줍니다.
sudo nano /etc/wsl.conf
[automount]
enabled=true
options="metadata,umask=22,fmask=11"

그리고 umask 값을 더 정확히 잡아주기 위해서 .profile
파일에서도 한 번 더 처리를 해주도록 합니다. ~/.profile
파일에 다음 줄을 추가해주세요.
# Note: Bash on Windows does not currently apply umask properly.
if [[ "$(umask)" = "0000" ]]; then
umask 0022
fi
이렇게 하면 이제 파일 시스템에 권한이 정상적으로 작동합니다. 쉘을 다시시작하여 변경 사항을 적용해주세요.
Theos 설치하기
괜찮으시다면 언제나 GitHub의 Theos 위키에서 최신 버전의 설치 방법을 유지하도록 하세요. 그리고 여기에서부터는 반드시 명령어를 root가 아닌 일반 사용자 계정을 설치하도록 합니다.
종속성 패키지 설치하기
아래 명령어로 올바른 Clang-6.0 종속성 패키지를 설치하기 위해 LLVM 저장소를 추가합니다.
bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)"
sudo apt update
그리고 다음 패키지를 설치해주세요. 만약 패키지를 찾을 수 없다면 sudo apt update
명령으로 목록을 새로고침해주어야 합니다.
sudo apt-get install fakeroot git perl clang-6.0 build-essential git -y
그리고 실제 빌드 시에도 영향을 최소화하기 위해서 fakeroot를 설정합니다.
sudo update-alternatives --set fakeroot /usr/bin/fakeroot-tcp
버전별 추가 설치 필요 패키지
아래는 특정 버전에서 일부 종속성이 기본적으로 설치되어 있지 않거나 필요한 경우 서술하였습니다.
- Ubuntu 20.04 LTS:
libncurses5
- Ubuntu Minimal Installation:
git nano
Theos 저장소 다운로드
이제 Git으로 Theos를 로컬로 가져올겁니다.
환경 변수 설정
그 전에 원하는 경로를 포함하여 아래 명령어로 $THEOS
환경 변수에 경로를 설정해줍니다. 대부분의 Theos 스니펫이나 스크립트는 아래 환경 변수를 필히 이용하기 때문입니다.
echo "export THEOS=~/theos" >> ~/.profile
그리고 즉시 반영이 되지 않기 때문에 환경 변수를 적용하기 위해 쉘을 다시시작해야 합니다. 다시시작한 후에도 echo $THEOS
명령을 통해 환경 변수가 정확히 설정되어 있는지 확인해주세요.

로컬에 저장소 가져오기
이제 아래 명령을 통해 Git으로 저장소를 가져옵니다.
git clone --recursive https://github.com/theos/theos.git $THEOS

Toolchain 및 SDK 설치하기
Toolchain은 x86_64에서 Apple이 Arm 환경(iOS)으로의 크로스 컴파일을 위해 만들어진 도구 집합입니다. 저희는 여기에서 Sam Bingner의 Toolchain을 설치하여 arm64e 컴파일을 가능하게 함과 동시에 현재 이슈에 열려있는 버그인 528번 이슈를 해결할 예정입니다. 그리고 iOS 13의 API 사용을 위해서 iOS 13의 Private SDK를 설치하도록 하겠습니다.
Toolchain 다운로드 및 설치
먼저 GitHub에서 Toolchain을 다운로드해줍니다.
wget https://github.com/sbingner/llvm-project/releases/download/v10.0.0-1/linux-ios-arm64e-clang-toolchain.tar.lzma
그리고 Toolchain 폴더를 미리 만들어줍니다.
mkdir -p $THEOS/toolchain/linux/iphone
마지막으로 압축을 풀고 폴더를 이동시켜줍니다.
tar --lzma -xvf linux-ios-arm64e-clang-toolchain.tar.lzma
mv ios-arm64e-clang-toolchain/* $THEOS/toolchain/linux/iphone
그럼 이렇게 Toolchain 설치가 완료됩니다.

Swift Toolchain 설치
추가로 Swift로 개발을 하고픈 분들은 Swift Toolchain을 설치해주시면 됩니다. (그래도 Objective-C의 굴레에서 벗어날 수 없다고)
curl https://kabiroberai.com/toolchain/download.php?toolchain=swift-ubuntu-latest -Lo swift-toolchain.tar.gz
tar xzf swift-toolchain.tar.gz -C $THEOS/toolchain
rm swift-toolchain.tar.gz
iOS 13 Private SDK 설치
아래 저장소에서 iOS 13 Private SDK를 설치해줍니다. 보통 나오는 최신 버전의 iOS SDK들은 Apple의 비공개 코드와 헤더를 포함하는 PrivateFrameworks 그리고 이전 버전의 Private API들을 통합해 만들어져 Public API 외에도 모든 API 접근을 가능하게 해줍니다.
sudo apt install zip unzip -y
wget https://github.com/SniperGER/iOS13-Private-SDK/archive/master.zip
unzip master.zip
그리고 다운로드받은 파일들을 맞는 위치에 옮겨줍니다.
cd iOS13-Private-SDK-master/
mv sdks/* $THEOS/sdks
cp -r include/* $THEOS/include/
Test
이제 모두 설치가 끝났으니 잘 작동하는지 테스트해보겠습니다. 아래는 간단히 샘플 프로젝트를 성공적으로 빌드하는 모습입니다.

네, 여기까지입니다. 그럼 좋은 iOS 개발되세요!