후손을 위해서 내가 사용하기 시작한 솔루션을 공유하겠습니다. 높은 수준에서 문제의 리소스를 애플리케이션 바이너리로 컴파일하여 리소스를 번들로 복사 할 필요가 없습니다.
모든 파일 데이터를 이진 파일로 컴파일하는 일반적인 방법은 파일 내용을 헤더 파일의 정적 바이트 배열에 저장하는 것입니다. 이미 헤더 파일이 생성되어 정적 lib 타겟에 추가되었다고 가정하면 다음 bash 스크립트를 사용하여 파일을 읽고 그 내용을 C 구문의 16 진수 리터럴의 바이트 배열로 씁니다.나는 다음 컴파일 소스 및 복사 헤더 구축 단계 전에 구축 단계 을 "스크립트 실행"에서 스크립트를 실행
#!/bin/bash
# Hexify.sh reads an input file, and hexdumps its contents to an output
# file in C-compliant syntax. The final argument is the name of the array.
infile=$1
outfile=$2
arrayName=$3
fileSize=$(stat -f "%z" $infile)
fileHexString=$(hexdump -ve '1/1 "0x%.2x, "' $infile)
prefix=$arrayName
suffix="Size"
variableName=$arrayName$suffix
nullTermination="0x00"
echo "//" > $headerFile
echo "// This file was automatically generated by a build script." >> $headerFile
echo "// Do not modify; the contents of this file will be overwritten on each build." >> $headerFile
echo "//" >> $headerFile
echo "" >> $headerFile;
echo "#ifndef some_arbitrary_include_guard" >> $headerFile
echo "#define some_arbitrary_include_guard" >> $headerFile
echo "" >> $headerFile
echo "static const int $variableName = $((fileSize+1));" >> $outfile
echo "static const char $arrayName[$variableName] = {" >> $outfile
echo -e "\t$fileHexString$nullTermination" >> $outfile
echo "};" >> $outfile
echo "#endif" >> $headerFile
따라서, 예를 들어, 나는 리소스 파일 example.txt이있는 경우 :
Hello this
is a file
을 내가 ./Hexify.sh example.txt myHeader.h exampleArray
을 실행했다, 헤더는 다음과 같이 보일 것이다 :
//
// This file was automatically generated by a build script.
// Do not modify; the contents of this file will be overwritten on each build.
//
#ifndef some_arbitrary_include_guard
#define some_arbitrary_include_guard
static const int exampleArraySize = 21;
static const char exampleArray[exampleArraySize] = {
0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x74, 0x68, 0x69, 0x73, 0x0a,
0x69, 0x73, 0x20, 0x61, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x00
};
#endif
지금, 나는 넣은 것 어떤 시점에서 메인 번들에서 말한 리소스, 대신 그 헤더 파일의 바이트 배열을 참조 할 수 있습니다. 내 버전의 스크립트는 데이터가 문자열 객체를 만드는 데 적합하도록 null로 끝나는 바이트를 추가합니다. 모든 경우에 적용되는 것은 아닙니다.
마지막 부록으로, bash 스크립트가 실제 bash 프로그래머를 괴롭히는 경우 사과드립니다. 나는 bash로 내가 뭘하는지 거의 모른다.
음, 흥미 롭습니다. 나는 프레임 워크가 iOS에서 불가능하지 않다는 인상을 받았다. 동적 라이브러리를 iOS의 정적 라이브러리로 대체하여 수동으로 "프레임 워크"구조를 만드는 것처럼 보입니다. 나는 이것을 시도해 볼 수 있습니다. –
Nineveh GL 베타 프레임 워크를 다운로드하여 가이드 작성자가 어떻게 작동하는지 확인하십시오. 무료입니다. –
오케이, 바이올린을 치고 나서 공식적으로이 작업이 가능하다고 말하면 꽤 좋습니다. 클라이언트 애플리케이션을 실행하는 동안 프레임 워크로 디버깅 할 수있는 능력이 없다는 것입니다. 프로젝트 참조와 정적 라이브러리로 할 수 있습니다. 내 엔진이 많이 개발 되었기 때문에 Xcode의 공유 프로젝트 중단 점에 익숙해졌습니다. 이것이 더 완성 된 프로젝트라면, 나는 분명히이 접근법을 취할 것입니다. 좋은 참조. –