티스토리 뷰

 개발을 하다보면 매번 아무 것도 없는 상태에서 시작하는 게 버거운 순간이 온다. 그럴 때 필요한 건 바로 템플릿! 나도 몇 개 앱을 개발해보니 생각보다 따로 설정하기 귀찮은 부분이 있어 미리 설정을 다 해놓은 템플릿만 있으면 비즈니스 로직만 갈아끼우면 되니 편하겠다는 생각이 들었고, 그래서 오늘은 iCloud 동기화 기능이 담긴 Template Repository를 만들었다.

 우선 XCode에서 사용할 수 있는 Project template 형태로 생성할까 했는데, 생성은 했는데 프로젝트를 생성할 때 팀 정보 입력하는 화면에서 안 넘어가는 이슈가 있었다. 그래서 아예 프로젝트덩어리째 템플릿화하는 방법을 생각했다.

 

깃허브에서 Template Repository 만들기

 평소와 똑같이 깃허브에서 Repository를 만들고, [Settings]로 이동하여 Template Repository를 체크한다. 그럼 이제 Template Repository는 생성된 것이다.

 

Template Repository에 템플릿처럼 사용할 내용 작성하기

 

.rename_project.sh 추가하기

프로젝트 루트에 rename_project.sh를 추가한다. (OLD_NAME은 각자 생성한 템플릿 레포지토리의 이름이어야 한다.) 이 파일은 어디에 쓸거냐하면 템플릿으로 프로젝트를 생성했을 때 Github Actions를 사용하여 자동으로 프로젝트명을 템플릿 프로젝트에서 지금 생성한 프로젝트명(아까 템플릿으로 레포지토리 생성할 때 썼던 Repository name)으로 변경하는 데 쓸 것이다.


  
#!/bin/bash
# 원래 Xcode 템플릿 프로젝트의 이름
OLD_NAME="ICloudSyncTemplate"
# GitHub Actions 또는 로컬 실행 시 프로젝트 이름 가져오기
if [ -n "$1" ]; then
NEW_NAME="$1"
else
NEW_NAME=$(basename "$PWD")
fi
echo "🔄 자동 감지된 새 프로젝트 이름: $NEW_NAME"
# ✅ 1. 파일 내부에서 OLD_NAME → NEW_NAME 변경 (Xcode 설정 포함)
echo "📂 파일 내부의 '$OLD_NAME'을 '$NEW_NAME'로 변경 중..."
find . -type f \( -name "*.xcodeproj" -o -name "*.xcworkspace" -o -name "*.pbxproj" -o -name "*.plist" -o -name "*.swift" -o -name "*.entitlements" \) -exec sed -i "s/$OLD_NAME/$NEW_NAME/g" {} \;
# ✅ 2. 특정 파일명을 프로젝트 이름으로 직접 변경
echo "📝 특정 파일명을 직접 변경 중..."
if [ -f "$OLD_NAME/$OLD_NAME.entitlements" ]; then
mv "$OLD_NAME/$OLD_NAME.entitlements" "$OLD_NAME/$NEW_NAME.entitlements"
fi
if [ -f "$OLD_NAME/$OLD_NAME""App.swift" ]; then
mv "$OLD_NAME/$OLD_NAME""App.swift" "$OLD_NAME/$NEW_NAME""App.swift"
fi
# ✅ 3. Xcode 프로젝트 설정 파일에서 `.entitlements` 경로도 자동 수정
echo "🔧 Xcode 프로젝트 설정에서 entitlements 파일 경로 수정 중..."
sed -i "s/$OLD_NAME.entitlements/$NEW_NAME.entitlements/g" $NEW_NAME.xcodeproj/project.pbxproj
sed -i "s/$OLD_NAME""App.swift/$NEW_NAME""App.swift/g" $NEW_NAME.xcodeproj/project.pbxproj
# ✅ 4. 일반 파일 및 폴더 이름 변경 ('.swift', '.entitlements' 포함)
echo "📝 일반 파일 및 폴더명 변경 중..."
find . -depth -name "*$OLD_NAME*" | while read file; do
new_file=$(echo "$file" | sed "s/$OLD_NAME/$NEW_NAME/g")
mv "$file" "$new_file"
done
echo "✅ 프로젝트 이름이 '$OLD_NAME'에서 '$NEW_NAME'로 자동 변경되었습니다!"

 

.github/workflows/rename-project.yml 추가

 이제는 Github Actions를 설정하기 위해 .github/workflows/rename-project.yml를 추가한다.


  
name: Rename Xcode Project
on:
push:
branches:
- main
permissions: # 🚀 GitHub Actions의 기본 토큰에 쓰기 권한 추가
contents: write
jobs:
rename_project:
runs-on: ubuntu-latest
steps:
- name: 레포지토리 체크아웃
uses: actions/checkout@v3
with:
persist-credentials: false # GitHub Actions 기본 인증을 사용하지 않도록 설정
- name: 프로젝트 폴더 이름 감지
run: |
PROJECT_NAME=$(basename "$GITHUB_WORKSPACE")
echo "New Project Name: $PROJECT_NAME"
- name: 실행 권한 부여
run: chmod +x rename_project.sh
- name: 프로젝트 이름 자동 변경
run: |
PROJECT_NAME=$(basename "$GITHUB_WORKSPACE")
./rename_project.sh "$PROJECT_NAME"
- name: 변경사항 확인 (디버깅용)
run: git status
- name: GitHub Actions 인증 및 푸시
env:
TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git config --global user.name "GitHub Actions"
git config --global user.email "actions@github.com"
# GitHub Actions에서 인증을 위한 GITHUB_TOKEN 사용
git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.git
# 변경 사항이 있을 경우에만 커밋 & 푸시
if [[ -n $(git status --porcelain) ]]; then
git add .
git commit -m "자동으로 프로젝트 이름 변경 및 Xcode 설정 업데이트"
git push origin main
else
echo "✅ 변경 사항이 없으므로 커밋을 건너뜁니다."
fi

 

 

템플릿으로 프로젝트 만들어보기
  • 우측 상단 [Use this template] 버튼을 눌러 [Create a new repository]를 선택한다.
  • Repository name이 프로젝트명이 되기 때문에 신중하게 정해서 입력하고 [Create Repository]를 클릭해서 새로운 레포지토리를 생성한다.
  • Template을 이용한 새로운 레포지토리가 생성된 후 [Actions] 탭을 확인해서 Initial commit이 완료되었는지 확인한다.
    • 프로젝트명에 맞게 모든 파일명을 변경하는 commit이 이루어진다.

 위 과정대로 진행하면 템플릿 레포지토리로 이제 프로젝트를 만들 수 있다. 나의 경우는 iCloud 동기화 템플릿 레포지토리이기 때문에 템플릿으로 만든 프로젝트를 XCode에서 열어서 [TARGETS] > [Signing & Capabilities]을 클릭하여 iCloud가 설정되어 있는지 확인하고 해당 프로젝트에서 사용할 Container를 생성하여 연결하는 과정이 추가적으로 필요하다.

 그래도 이제 저 템플릿으로 프로젝트를 생성하면 별도로 iCloud에 대한 설정 없이 Container만 연결해주고 바로 개발에 들어갈 수 있다.

300x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함