티스토리 뷰

안녕하세요

이번 글은 사실 약 한달전 회사 동료가 요청한 글인데

어쩌다 보니 이제서야 올리게 되었다는 안타깝고 슬픈 이야기 입니다. 

(연말연초는 정리할 서류가 너무 많...)

자 그럼 문제 상황부터 같이 보시면서 이야기 하도록 하겠습니다. 

 

* 문제 상황 

- 라이브러리 하나 때문에 저 하얀 Xcode 가 생기는 게 너무 싫어요 (실제로 이렇게 이야기 하심)

- 저 하얀 걸 없애면서 라이브러리를 사용할 방법은 없나요?

# 이때 언급되는 하얀 Xcode는 저희가 Cocoapod 을 사용하면 자연스럽게 보게 되는 이걸 말하는 겁니다. 

- .xcworkspace 형식의 하얀 아이콘이 특징인 친구에요.

하얀 Xcode

 

- 아무래도 이분 입장에서는 Cocoapod을 처음 사용하시다 보니 이런 일이 발생한 것 같네요. 

(저도 근데 Cocoapod 은 별로 안 좋아하긴 해서...)

 

* 해결 방법

- 1~2개짜리 Cocoapod을 위해 생성되는 XCworkspace를 없애기 위해 Cocoapod을 다른 형태로 바꾸어 적용하는 방법

- 이 경우에는 Cocoapod 을 사용하지 않기 때문에 저 하얀 걸 삭제할 수 있게 됩니다.

 

그래서 오늘 예제로 사용할 샘플 라이브러리는 바로 이겁니다. 

(원하시는 라이브러리가 있으시면 그걸 사용하시면 됩니다.)

 

* Base32

이 라이브러리는 Base32 인코딩 디코딩을 지원해주는 라이브러리입니다. 

https://github.com/norio-nomura/Base32.git

 

GitHub - norio-nomura/Base32: Base32 for Swift

Base32 for Swift. Contribute to norio-nomura/Base32 development by creating an account on GitHub.

github.com

 

# 주의

- 만약 본인이 원하는 라이브러리가 있다면 반드시 저작권을 확인하시고 진행해주세요!!!

- 수정 허가 및 상업적 이용 등 필요한 조건을 확인해주세요!!

(저는 개인적 이용이긴 하지만 회사에서 사용하시는 분들은 반드시 확인해주세요.)

이런식으로 라이센스 종류가 다 다릅니다.

 

참고로 요즘은 많은 라이브러리들이 Cocoapod 뿐만 아니라 다른 방법으로도 적용이 가능하도록 많이 지원을 해주십니다. 

이 분이 지정한 라이브러리의 경우에는 Carthage / Cocoapod 두가지 방법을 지원해준다고 되어있습니다. 

 

하지만 저는 간단하게 연결하는 Swift Package 가 너무나도 그리웠기(?) 때문에 

Swift Package 로 형식을 바꾸어 연결하는 법을 알아보도록 할 겁니다. 

 

* 만드는 방법 

1. 원본 라이브러리를 다운로드 받습니다. 

- Git 에 보면 이런 식으로 다운로드 버튼이 있습니다. 

Download ZIP 을 눌러서 파일을 받아주세요

- Zip 파일을 다운로드 받은 후 압축해제해주세요

이렇게 하면 됩니다

 

2. swift Package 연결을 위한 임의의 파일을 하나 만들어줍니다. 

- 터미널을 열어서 명령어를 통해 파일하나를 만들어야합니다.

- 아까 다운받은 폴더 위치에 아래 명령어를 터미널로 실행해줍니다.

touch Package.swift

- 잘 작동한게 맞으면 아래처럼 보이게 됩니다.

파일이 하나 더 생긴게 보이시나요?

 

3. 만들어진 파일의 내용을 확인합니다. (이름 반드시 확인!!!!)

- 자신이 만든 파일의 내용이 맞는지 확인해주세요.

- 저는 아래처럼 내용이 만들어졌습니다. (내용은 라이브러리마다 다르게 나옵니다.)

// swift-tools-version:4.2
import PackageDescription

var package = Package(
    name: "Base32",
    products: [
      .library(name: "Base32", targets: ["Base32"])
    ],
    targets: [
        .target(name: "Base32"),
        .testTarget(name: "Base32Tests", dependencies: ["Base32"])
    ],
    swiftLanguageVersions: [.v4, .v4_2, .version("5")]
)

#if os(macOS)
    package.targets.append(.testTarget(name: "SecEncodeTransformTests", dependencies: ["Base32"]))
#endif

 

* 연결 방법

1. 기존에 Cocoapod 연결을 먼저 삭제하고 하얀 Xcode 를 없앱니다. 

- 안전한 적용을 위해 Cocoapod 을 먼저 없었던 상태로 되돌려야합니다. 

- Podfile 에서 이것만 빼고 pod install 해주세요. 

마지막줄 보이시나요?

-위처럼 마지막 줄에 저런 게 뜨면([!] 부분) 하얀색 아이콘을 삭제하셔도 무방합니다. 

- 본인이 적용중인 Cocoapod하나도 없을 경우에만 저런 줄이 나오게 됩니다.

- 만약 Cocoapod 을 이제 안쓴다 하시는 분들은 Xcode 닫고 아래 사각형 안 파일은 전부 날리시면 됩니다.

(진짜 필요가 없으신게 맞는지 확인하고 삭제하셔야합니다!!!)

저 4가지는 삭제하셔도 됩니다

삭제가 무서우신 분들은 삭제 안하고 그냥 파란색 Xcode 열어서 작업하셔도 됩니다. 

확신이 드실때 지우셔도 상관 없습니다.(어차피 Cocoapod을 안쓰면 상관X)

 

2. 저희가 제작한 SwiftPackage 를 파일로 연결합니다. 

- 파란색 Xcode(.xcodeproj)파일을 열어 줍니다. 

- 아마 빨간색으로 Pods 파일 같은게 보이시는 경우가 있을텐데 더 이상 안 쓸꺼면 삭제하셔도 됩니다. 

- 프로젝트 우클릭 하시면 아래처럼 패키지 추가하는게 있습니다. 

눌러주세요.

- 아래 보시면 Add Local... 버튼 있습니다. 눌러주세요.

여기서 파일 선택하는게 뜰겁니다.

- 아까 저희가 Package.swift 하셨던 걸로 선택하시고 Add Package 해주세요. 

이름 조심하세요

- 그 후 적용되었던 코드 보시면 아래처럼 빨간줄이 뜨는 경우가 있습니다. 

이렇게

- Package.swift 에 있는 이름으로 적용되서 그런거기 때문에 이름을 아래처럼 바꾸시면 그대로 사용이 가능합니다. 

import UIKit
//import SwiftBase32// Cocoapod
import Base32// Swift Package

 

* 결과 

- 라이브러리를 SwiftPackage 로 적용한 덕분에 프로젝트 파일이 눈에 띄게 줄어든 모습입니다.

- 확실히 이전보다 깔끔하죠?  

깔끔

- 개발하시는 분에 따라 어느 쪽이 편하실지는 선택일것같습니다.  

 

* 주의 

- 파일로 연결한 것이기 때문에 URL 로 연결한 다른 라이브러리처럼 자동으로 업데이트 되지 않습니다

- 만약 라이브러리가 수정되면 위 방법을 통해 다시 만들어야합니다. 

- 간혹 이 과정을 하다가 라이브러리 자체에서 오류가 나는 경우도 있습니다.(UI관련 라이브러리들)

- 그럴경우 다운로드 받은 라이브러리 폴더에서 직접 코드를 수정하여 오류를 고쳐야 정상적인 사용이 가능합니다. 

- 보통 import UIKit 혹은 import Foundation 하면 수정되더라고요;;

 

아무튼 이건 호불호가 조금 갈릴 것 같은 문제인데 

 

아 나는 한두개짜리 Cocoapod을 위해 Cocoapod을 깔고 파일 많아지는게 싫다 하시는 분들에게는

도움이 될 것 같아서 올려봅니다. (일단 저)

 

 

* 2025.01.23 추가 

단순 파일 삭제만으로는 삭제가 깔끔히 안되는 경우가 있는데

이 경우에는 명령어를 통해 삭제해주셔야 합니다.  

아래 명령어를 한 줄씩해주세요!!

sudo gem install cocoapods-deintegrate cocoapods-clean
pod deintegrate
pod cache clean --all

 


오늘도 파이팅입니다~

댓글