program story

iOS 자산 번들을 만드는 방법은 무엇입니까?

inputbox 2021. 1. 5. 08:05
반응형

iOS 자산 번들을 만드는 방법은 무엇입니까?


내가 평가 한 iOS 프로젝트에서 사용자 정의 자산 번들을 보았으므로 적어도 가능하다는 것을 알고 있습니다.

내 문제는 주어진 이미지에 대해 약 22,000 개의 타일이있는 CATiledLayer를 사용하고 있으며 컴파일하는 데 매우 오랜 시간이 걸린다는 것입니다 (일반 빌드의 경우 5-10 분). 따라서 모든 이미지를 가져 와서 이식 가능한 사용자 지정 번들을 만들고 매번 앱 번들로 다시 컴파일하지 않기를 바랍니다.

어떻게해야합니까? 문서를 확인했지만 실제로 번들을 만드는 방법에 대한 설명을 보지 못했습니다.


대답은 어리석게 간단

파인더에서 폴더를 만들고, 파일을 추가하고, 이름을 bundlename.bundle로 변경합니다.

Xcode로 드래그-성공!

액세스하려면 PathToMainBundle + "/ bundlename.bundle"형식을 사용하십시오.


번들을 만드는 방법

  1. 파인더에서 폴더를 만듭니다.
  2. 폴더에 파일 추가
  3. 확장자가되도록 폴더 이름을 변경합니다 .bundle(예 : "새 폴더"-> "BundleName.bundle").

추신 : 언제든지 폴더를 마우스 오른쪽 단추로 클릭하고 "패키지 내용 표시"를 눌러 파일을 추가, 제거 또는 수정할 수 있습니다.

Xcode에 번들을 추가하는 방법

  1. Xcode로 드래그

번들 사용 방법

NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"BundleName" ofType:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath]; 
NSString *resource = [bundle pathForResource:@"fileName" ofType:@"fileType"];

(교체 BundleName, fileName그리고 fileType적절한 이름)


다른 두 가지 유용한 조언 :

먼저 XCode에서 번들의 내용을 보려면 File Inspector 유틸리티 창에서 해당 유형을 "Application Bundle"로 설정해야합니다. 여전히 XCode를 통해 복사 할 수 없습니다. 터미널을 사용해야하지만 XCode가 즉시 업데이트합니다.

둘째, 번들의 리소스를 사용하기위한 유용한 스 니펫이 있습니다.

NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"AquarianHarp" ofType:@"bundle"];
NSString *imageName = [[NSBundle bundleWithPath:bundlePath] pathForResource:@"trebleclef2" ofType:@"png"];
UIImage *myImage = [[UIImage alloc] initWithContentsOfFile:imageName];

위의 의견에서 언급했듯이 실제로 번들을로드 할 필요가 없으며 (실행할 수 없으므로 실행할 수 없음) 장치ofType 에서 작동하려면 실제 파일의 대소 문자와 일치해야합니다 . 시뮬레이터에서 어느 쪽이든 작동하므로이 붉은 청어에 속지 마십시오!

마지막으로 번들 내부의 "Resources"하위 폴더에 리소스를 넣을 필요가 없습니다. 임의의 레이아웃을 사용할 수 있지만 알 수없는 성능 영향이있을 수 있습니다.


이 작업을 수행하는 방법은 다음과 같습니다. XCode에서 새 파일 만들기 | 자원 | 설정 번들. 그런 다음 Finder에서 해당 번들을 선택하고 Show Package Contents를 선택한 다음 이미지 파일을 추가합니다.

그런 다음 코드에서 다음과 같이 이미지를 참조합니다.

NSString *imgName = @"bundlename.bundle/my-image.png";
UIImage *myImage = [UIImage imageNamed:imgName]; 

XCode 프로젝트에서 파일 번들링 및 읽기에 대한 내 노트

단계 :

  1. test.txt 파일을 만들고 여기에 "testing✌️"텍스트를 추가 한 다음 test.bundle이라는 폴더에 넣습니다.
  2. xcode의 .app 파일 옆에 끌어서 놓기 (복사)
  3. print(Bundle.main.resourcePath!+"/temp.bundle/test.txt") 출력 : /Users/James/Library/Developer/Xcode/DerivedData/GitSyncMac-heiwpdjbtaxzhiclikjotucjguqu/Build/Products/Debug/GitSyncMacApp.app/Contents/Resources/temp.bundle/test.txt

예:

print(content(Bundle.main.resourcePath!+"/temp.bundle/test.txt"))// testing✌️
static func content(_ path:String)->String?{
    do {
        let content = try String(contentsOfFile:path, encoding:String.Encoding.utf8) as String//encoding: NSUTF8StringEncoding
        return content
    } catch {
        return nil
    }
}

자산 또는 리소스 번들 (예 :)을 생성하는 단계는 다음과 같습니다. FrameworkResources.bundle놀랍도록 분명하지 않습니다. 이것은 정적 프레임 워크를 만드는 경우 특히 유용합니다.

  1. File-> New-> Target in Xcode를 누릅니다.
  2. "macOS"탭을 선택하고 "Bundle"을 검색합니다.
  3. "Bundle"탭-> "Next"클릭-> 제품 이름 "MyResources"입력-> "Finish"탭
  4. Go to "Build Settings" for the newly created Bundle. Change "Base SDK" (SDKROOT) to "iOS'
  5. Go to "Build Phases" for the newly created Bundle. Delete "Compile Sources" and "Link Binary With Libraries" (this will remove the executable within the bundle which can cause all sorts of build and app submission errors)

ReferenceURL : https://stackoverflow.com/questions/4888208/how-to-make-an-ios-asset-bundle

반응형