πŸ” iOSμ—μ„œμ˜ λ³΄μ•ˆ (2)

CharlieΒ·2024λ…„ 3μ›” 14일
0
post-thumbnail

μ§€λ‚œ ν¬μŠ€νŒ…μ—μ„œ 카카였 μ•± ν‚€λ₯Ό Plistμ—μ„œ κ΄€λ¦¬ν•˜μ—¬ λ³΄μ•ˆ 상 λ¬Έμ œκ°€ 될 수 μžˆλŠ” μ΄μŠˆμ— λŒ€ν•΄μ„œ μ–ΈκΈ‰ν–ˆμŠ΅λ‹ˆλ‹€. 이 뿐만 μ•„λ‹ˆλΌ 이번 ν”„λ‘œμ νŠΈμ—μ„œ FireBaseλ₯Ό μ‚¬μš©ν•˜λ©΄μ„œ GoogleService-Info.plist에 λŒ€ν•΄μ„œλ„ λ³„λ„μ˜ λ³΄μ•ˆμ  관리λ₯Ό ν•˜μ§€ μ•Šκ³  Github repository에 μ˜¬λ¦¬λŠ” λ“±μ˜ μž‘μ—…μ„ ν–ˆμ—ˆκΈ° λ•Œλ¬Έμ— 이번 ν¬μŠ€νŒ…μ—μ„œλŠ” μ΄λ ‡κ²Œ λ³΄μ•ˆμ΄ μœ μ§€λ˜μ–΄μ•Ό ν•˜λŠ” νŒŒμΌλ“€μ— λŒ€ν•΄μ„œ μ–΄λ–»κ²Œ μ²˜λ¦¬ν•˜μ˜€λŠ”μ§€ 순차적으둜 μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

0. 데이터 λ…ΈμΆœμ˜ μœ„ν—˜μ„±

본격적으둜 이슈λ₯Ό ν•΄κ²°ν•˜κΈ° 전에, λ°μ΄ν„°μ˜ λ…ΈμΆœμ΄ μ™œ μœ„ν—˜ν•œμ§€μ— λŒ€ν•΄μ„œ 생각을 λ¨Όμ € ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.
μ‚¬μš©μžμ˜ λ―Όκ°ν•œ 데이터가 λ…ΈμΆœλ˜λŠ” 것은 맀우 μ§κ΄€μ μœΌλ‘œ μœ„ν—˜μ„±μ„ μ•Œ 수 있고, μœ„μ˜ API key와 같은 데이터듀 λ˜ν•œ λ…ΈμΆœμ΄ 되면 λ³΄μ•ˆ 취약점이 μƒκΈ°κ²Œ 되고 그에 따라 μ•…μ˜μ μΈ κ³΅κ²©μžκ°€ 곡격을 μ‹œλ„ν•  수 있게 λ˜λ―€λ‘œ 항상 이와 같은 데이터λ₯Ό μ•ˆμ „ν•˜κ²Œ κ΄€λ¦¬ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.

μ΅œκ·Όμ—λ„ DDoS λ˜λŠ” API Key λ…ΈμΆœλ‘œ μΈν•œ 곡격으둜 인해 λ§‰λŒ€ν•œ μ„œλ²„ μ‚¬μš©λ£Œλ₯Ό λΆ€κ³Όν•΄μ•Ό ν•˜λŠ” ν”Όν•΄μž 상황이 λ°œμƒν•˜κΈ°λ„ ν–ˆμŠ΅λ‹ˆλ‹€.

1. xcconfig 파일 생성

μš°μ„  Xcodeμ—μ„œ xcconfig νŒŒμΌμ„ μƒμ„±ν•΄μ€λ‹ˆλ‹€. xcconfig 파일과 κ΄€λ ¨ν•œ μžμ„Έν•œ λ‚΄μš©μ€ μ• ν”Œμ˜ 곡식 λ¬Έμ„œμ—μ„œ ν™•μΈν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.

KAKAO_APP_KEY = // ...
GID_CLIENT_ID = // ...
REVERSED_GID_CLIENT_ID = // ...

μ €λŠ” μœ„μ™€ 같이 ν”„λ‘œμ νŠΈμ—μ„œ μ‚¬μš©ν•  킀듀을 μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

λ²ˆμ™Έ) Tuistλ₯Ό ν†΅ν•œ xcconfig μ„€μ •

Tuistλ₯Ό μ‚¬μš©ν•˜μ—¬ ν”„λ‘œμ νŠΈλ₯Ό κ΄€λ¦¬ν•˜μ˜€κΈ° λ•Œλ¬Έμ— xcconfig 파일 λ˜ν•œ Tuist의 섀정을 톡해 ν™œμš©ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

μ €λŠ” ν”„λ‘œμ νŠΈ 생성 μ‹œ debugConfigPath, releaseConfigPathλ₯Ό λ°›μ•„ μ‚¬μš©ν•˜μ˜€μŠ΅λ‹ˆλ‹€. Scheme이 μΆ”κ°€λœ ν™˜κ²½μ—μ„œλŠ” 그에 맞게 더 μΆ”κ°€ν•΄μ„œ μ‚¬μš©ν•˜λ©΄ λ©λ‹ˆλ‹€.

 let settings: Settings = .settings(base: [/* ... */], 
 									configurations: [.debug(name: .debug, xcconfig: debugConfigPath),
                                    				 .release(name: .release, xcconfig: releaseConfigPath)],
                                    defaultSettings: .recommended)

2. Info.plist μˆ˜μ •

κΈ°μ‘΄μ—λŠ” Info.plist νŒŒμΌμ— 직접 μœ„ 킀듀이 μ €μž₯λ˜μ–΄ μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
μ•žμ„œ xcconfig νŒŒμΌμ„ μƒμ„±ν•˜κ³  ν•΄λ‹Ή νŒŒμΌμ— 킀듀을 μ €μž₯ν•΄λ†“μ•˜μœΌλ―€λ‘œ Info.plist νŒŒμΌμ—μ„œλŠ” 이λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

3. Bundle extension

이번 ν”„λ‘œμ νŠΈμ—μ„œλŠ” AppDelegateμ—μ„œ 카카였의 μ•± ν‚€λ₯Ό ν•„μš”λ‘œ ν–ˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ ν•΄λ‹Ή 데이터에 μ ‘κ·Όν•˜κΈ° μœ„ν•΄ Info.plist에 μ €μž₯된 Kakao App Key 속성에 μ ‘κ·Όν•˜μ—¬μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€.

extension Bundle {
    public var kakaoAppKey: String? {
        return Bundle.main.infoDictionary?["Kakao App Key"] as? String
    }
}

μœ„μ™€ 같이 Bundle의 extension을 ν™œμš©ν•˜μ—¬ ν•΄λ‹Ή 속성에 μ ‘κ·Όν•œ ν›„ μ½”λ“œμ—μ„œ ν™œμš©ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

4. .gitignore

1번 λ‹¨κ³„μ—μ„œ μƒμ„±ν•œ xcconfig νŒŒμΌμ€ κΉƒν—ˆλΈŒμ— μ˜¬λΌκ°€μ„œλŠ” μ•ˆλ©λ‹ˆλ‹€. λ”°λΌμ„œ ν•΄λ‹Ή 파일과 GoogleService-Info.plistνŒŒμΌμ„ μΆ”κ°€λ‘œ .gitignoreνŒŒμΌμ— μΆ”κ°€ν•΄μ£Όμ—ˆμŠ΅λ‹ˆλ‹€.

5. 이미 μ˜¬λΌκ°„ 파일 μ‚­μ œ

아직 κΉƒν—ˆλΈŒμ— 데이터가 μ˜¬λΌκ°€μ§€ μ•Šμ•˜λ‹€λ©΄ 4λ²ˆκΉŒμ§€λ§Œ μ§„ν–‰ν•˜λ©΄ λ˜μ§€λ§Œ, 이미 μ˜¬λΌκ°€μ§€ μ•Šμ•„μ•Ό ν•  데이터듀이 μ˜¬λΌκ°„ μƒνƒœλΌλ©΄ ν•΄λ‹Ή νŒŒμΌλ“€μ˜ 기둝을 μ‚­μ œν•˜κΈ° μœ„ν•΄μ„œ μ•„λž˜ μž‘μ—…μ„ μΆ”κ°€λ‘œ μ§„ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€.

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch 경둜/파일λͺ….ν™•μž₯자' --prune-empty --tag-name-filter cat -- --all

git add .

git commit -m "πŸ”₯ 기둝 μ‚­μ œ"

git push origin --force --all
  • git filter-branch : 컀밋을 재 μž‘μ„±ν•  λ•Œ μ‚¬μš©ν•˜λŠ” λͺ…λ Ήμ–΄
  • --force : κ°•μ œλ‘œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” λͺ…λ Ήμ–΄
  • --index-filter : κΉƒ μ €μž₯μ†Œμ˜ 인덱슀λ₯Ό λ³€κ²½ν•˜λŠ” ν•„ν„°λ₯Ό μ§€μ •ν•˜λŠ” λͺ…λ Ήμ–΄
  • git rm --cached --ignore-unmatch 경둜/파일λͺ….ν™•μž₯자 : ν•΄λ‹Ή νŒŒμΌμ„ κΉƒ μΈλ±μŠ€μ—μ„œ μ‚­μ œν•˜λŠ” λͺ…λ Ήμ–΄
    • git rm -r --cached --ignore-unmatch 경둜 와 같이 λͺ…λ Ήμ–΄λ₯Ό μž‘μ„±ν•˜λ©΄ 파일이 μ•„λ‹Œ 폴더λ₯Ό μ‚­μ œν•©λ‹ˆλ‹€.
    • --cached μ˜΅μ…˜μ„ μ‚¬μš©ν•˜λ©΄ κΉƒν—ˆλΈŒμ—μ„œλ§Œ μ‚­μ œκ°€ 되며 λ‘œμ»¬μ—μ„œλŠ” μ‚­μ œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν•΄λ‹Ή μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ λ‘œμ»¬μ—μ„œλ„ μ‚­μ œκ°€ λ©λ‹ˆλ‹€.
  • --prune-empty : 빈 컀밋일 경우 μ‚­μ œ
  • --tag-name-filter cat : λͺ¨λ“  νƒœκ·Έλ₯Ό λ‹€μ‹œ μƒμ„±ν•˜λ„λ‘ μ„€μ •ν•˜λŠ” λͺ…λ Ήμ–΄
  • -- --all : λͺ¨λ“  λΈŒλžœμΉ˜μ™€ νƒœκ·Έμ— λŒ€ν•΄μ„œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” λͺ…λ Ήμ–΄. ν•΄λ‹Ή μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ ν˜„μž¬ λΈŒλžœμΉ˜μ—μ„œλ§Œ μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.
  • git push origin --force -all : μ‚­μ œκ°€ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλ˜μ—ˆμœΌλ©΄ force-push ν•΄μ€λ‹ˆλ‹€.

μœ„ λͺ…λ Ήμ–΄λŠ” κΉƒ μ €μž₯μ†Œμ˜ 기둝을 μˆ˜μ •ν•˜λ―€λ‘œ μˆ˜μ •ν•œ 컀밋 μ΄ν›„μ˜ λͺ¨λ“  μ»€λ°‹μ˜ ν•΄μ‹œκ°’μ΄ λ³€κ²½λ©λ‹ˆλ‹€. λ”°λΌμ„œ ν˜‘μ—…ν•˜λŠ” 개발자 λΆ„λ“€κ³Ό μΆ©λΆ„ν•œ ν˜‘μ˜ ν›„ ν•΄λ‹Ή μž‘μ—…μ„ μˆ˜ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€.

Reference

κΉƒ νžˆμŠ€ν† λ¦¬ νŠΉμ • 파일 μ‚­μ œ
gitμ—μ„œ 잘λͺ» 올린 파일의 이전 내역을 μ „λΆ€ μ œκ±°ν•˜λŠ” 방법
https://velog.io/@yoogail/GitHub에-이미-올린-파일-historyμ—μ„œ-μ‚­μ œν•˜κΈ°

profile
Hello

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보