겪었던 문제
회사 프로젝트 중 하나는 iOS와 macOS를 동시에 지원한다.
프로젝트가 아직은 별로 크지 않아서 한 프로젝트로 별도의 모듈화도 없이 관리가 되었지만,
추가로 들어온 요구사항 때문에 앞으로는 iOS와 macOS를 분리해서 관리하는 게 유리하다고 판단을 했다.
그래서 공통적으로 사용하는 Extension이나, Util로 분류할 수 있는 코드들은 SPM(Swift Package Manager)을 이용해서 라이브러리화 하였다. Github에 올라와 있는 SPM을 지원하는 라이브러리들 모두가 곧 예제가 되기 때문에, 간단한 SPM 사용법을 익히는 것은 어렵지 않았다.
그런데 한가지 굉장히 불편한 점이 있었는데, SPM 프로젝트에 Swift 파일을 새로 생성할 때 그 파일의 이름이 무조건 "File.swift"로 고정되어 생성되어 버린다는 것이다.
특히 파일의 헤더(아래 주석 쪽)에도 해당 파일명이 같이 들어가 버리니 매번 두 곳의 이름을 변경해주어야 한다는게 꽤나 귀찮았다.
해결 방법을 구글링을 통해 찾아보았다.
"TemplateInfo.plist" 파일 수정
출처 : https://stackoverflow.com/questions/72472384/xcode-does-not-allow-me-to-specify-file-name-when-adding-in-spm
우선, 터미널을 실행해서 다음 경로를 찾아 들어가 보자. 그러면 파일이 두 개 있을 것이다.
/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File Templates/Source/Package Swift File.xctemplate
우선 TemplateInfo.plist
파일부터 수정해보자.
해당 파일은, Xcode에서 새로운 파일을 생성할 때 사용하는 Template에 대한 설정 파일이다.
이 파일의 내용을 다음 내용으로 완전히 덮어씌우자.
TemplateInfo.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>SupportsSwiftPackage</key>
<true/>
<key>Kind</key>
<string>Xcode.IDEFoundation.TextSubstitutionFileTemplateKind</string>
<key>Description</key>
<string>An empty Swift file for package.</string>
<key>Summary</key>
<string>An empty Swift file for package.</string>
<key>SortOrder</key>
<string>1</string>
<key>Image</key>
<dict>
<key>FileTypeIcon</key>
<string>swift</string>
</dict>
<key>AllowedTypes</key>
<array>
<string>public.swift-source</string>
</array>
<key>Platforms</key>
<array />
<key>DefaultCompletionName</key>
<string>File</string>
<key>MainTemplateFile</key>
<string>___FILEBASENAME___.swift</string>
<key>Options</key>
<array>
<dict>
<key>Identifier</key>
<string>productName</string>
<key>Required</key>
<true/>
<key>Name</key>
<string>Name:</string>
<key>Description</key>
<string>The name of the file to create</string>
<key>Type</key>
<string>text</string>
<key>NotPersisted</key>
<true/>
</dict>
</array>
</dict>
</plist>
만약 sudo 명령어를 사용해도 권한 때문에 파일 수정이 안된다면,
위 파일을 따로 파일로 저장한 다음, 해당 경로를 Finder로 open 하여 드래그 & 드롭으로 옮겨버리면 덮어씌워질 것이다.
(나는 그렇게 해결했다.)
파일을 잘 덮어씌웠다면, 다시 Xcode를 실행해서 New file 메뉴를 실행해 보자.
Package Swift File
이라는 파일 템플릿이 새로 생겼을 것이다.
이 템플릿을 선택하고 Next를 클릭하면, 아래처럼 파일 이름을 입력받는 화면으로 잘 넘어갈 것이다.
"___FILEBASENAME___.swift" 수정
이제 파일 이름은 입력한 대로 잘 생성되는데, 주석으로 자동 생성되던 헤더 영역이 없어졌다.
이 헤더 영역에 파일명이 적혀있는 것을 이용해서 파일을 자주 찾기 때문에, 이 헤더가 없으면 매우 불편할 것이다.
이렇게 새로 생성되는 파일의 내부 템플릿은, 같은 경로에 있는 ___FILEBASENAME___.swift
파일이다.
마찬가지로, 파일을 열어서 수정하거나 다른 경로에서 생성한 파일을 덮어씌우면 된다.
파일 내용은 아래와 같이 입력해 준다.
___FILEBASENAME___.swift
//___FILEHEADER___
import Foundation
생성되는 주석 양식을 그대로 입력하는 게 아니라, //__FILEHEADER__
라고 입력해 주면 된다.
마무리
이제 파일을 다시 생성해 보면 잘 되는 것을 확인할 수 있을 것이다.
'iOS(macOS)' 카테고리의 다른 글
[Xcode/SPM] Package 최초 생성 시 "Invalid manifest" 에러 (1) | 2024.03.23 |
---|---|
[iOS/macOS] FCM을 사용한 Remote Push Notification 구현 방법과 문제 해결 기록 (1) | 2024.02.09 |
[App Store/심사] 심사 요청이 "심사 대기중"에서 안넘어간다? (0) | 2023.11.13 |
[Xcode] SVG 활용과 “clip: empty path.” 에러 해결하기 (0) | 2023.06.21 |