2013-08-20 4 views
1

지금까지 XCode 프로젝트에서 내 애셋을 평소와 같이 사용하고있는 게임에 대해 연구 중입니다.하지만 런타임에로드하는 것이 가능할지 모르겠지만 잘 모르겠습니다. 어떻게하는지. 나는 실제로 자산을 온라인으로 저장하고로드하는 것이 parse.com 서비스를 사용하고 있습니다. 그러나 컴파일되는 프로젝트와 관련하여 어떻게 작동합니까? 또는로드 된 후에 자산이 실제로 프로그램의 일부인 것을 알고있는 XCode 프로젝트?iOS에 애셋로드하기

+0

자산을 번들로 저장 하시겠습니까? 또는 서버에서 자산을 다운로드 하시겠습니까? –

+0

서버에서 다운로드. – Phil

답변

3

자산이 응용 프로그램 번들의 일부인 경우 IPA 파일 크기가 합쳐집니다. OTA의 경우 IPA 문제의 크기. 현재는 OTA size limit is 50MB입니다. 게임의 경우, 자산 크기는 일반적으로 수백 가지의 MB로 실행될 수 있습니다.이 MB는 앱 스토어에서 OTA 다운로드를 제한합니다.

따라서 응용 프로그램은 게임을 처음 실행할 때 필요한 자산을 다운로드하여 디스크에 저장합니다. 이 방법의 경우 응용 프로그램은 이력서 기능 (오류 처리 또는 부분 다운로드 시나리오 용) 및 캐싱 기술을 사용하여 자산 다운로드 모듈을 구현해야합니다.

번들 자산
하면 응용 프로그램이 서버에서 리소스를 다운로드 할 때

NSString *imgBundlePath=[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"someimage.png"]; 
UIImage *image = [[UIImage alloc] initWithContentsOfFile:imgBundlePath]; 

다운로드 자산
유사한 코드를 사용하는 데 필요한 번들 리소스에 액세스하려면 파일이 있어야 다운로드 응용 프로그램 디렉토리에 저장됩니다. 장치에 일단 설치되면 읽기 전용이므로 번들에 저장할 수 없습니다. 이 파일에 액세스하려면 코드는

// Assuming downloaded assets are stored in NSCachesDirectory 
NSArray *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
NSString *imgPath = [[cachePath lastObject] stringByAppendingPathComponent:@"someimage.png"]; 
UIImage *image = [[UIImage alloc] initWithContentsOfFile:imgBundlePath]; 

희망입니다.

+0

내가 다운로드 한 옵션에 관심이 있습니다.하지만 게임의 첫 번째 실행에 저장되지만 앱 스토어에있는 많은 게임이 실행될 때마다 종종 애셋을로드하는 것처럼 보입니까? 그들을 저장하지 않습니까? – Phil

+0

@Phil IMO, 각 실행마다 자산을 다운로드하면 UX가 약간 방해 될 수 있습니다. 또한 데이터 다운로드와 관련하여 매번 지불해야하는 비용이 있으며 데이터 연결이 없으면 게임을 실행할 수 없습니다. 그것은 다소 불쾌합니다. – Amar

0

이미지 애셋의 경우, Coredata을 백엔드로 사용하여 이미지를 BLOB 유형으로 저장할 수 있습니다. 이미지를 자주 업데이트하거나 필요에 따라 이미지를로드해야하는 경우 이미지를 서버에 보관하고 SDWebImage library을 사용하여 다운로드하거나 표시 할 수 있습니다.

요청에 따라 이미지를로드하려면 인터넷 연결이 필요합니다.

이제 아키텍처를 결정하는 것이 좋습니다.