Clover
article thumbnail

겪었던 문제

회사 프로젝트 중 하나는 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__ 라고 입력해 주면 된다.

 

 

 


마무리

이제 파일을 다시 생성해 보면 잘 되는 것을 확인할 수 있을 것이다.