상세 컨텐츠

본문 제목

Xcode 에서 리소스(Resources) 파일추가, 관리

스마트기기개발관련/IOS 개발

by AlrepondTech 2012. 9. 3. 14:53

본문

반응형


리소스 관리할때 개발툴에서 그냥 다이렉트로 리소스 관련 폴더에 관리해주고

폴더 안에 파일을 지우거나 바로 finder로 파일들을 이동시켜주면 인식된다.

////////////////////////////////////////////////////////////////////////////////

출처: http://liebus.tistory.com/139


개발을 하다 보면 

리소스 영역에 파일은 넣어 두고 

NSString *path = [[NSBundle mainBundlepathForResource:@"English" ofType:@"txt"];

NSString *strText = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncodingerror:nil]; 

이런식으로 읽어 와서 파일의 내용을 사용하고 싶을대가 있다. 

3.x 때에는  Resources 디렉토리가 존재 해서 거기다 붙여 넣으면 됐는대 

4.x 에는 그 디렉토리가 없어서 한참 해맸다. 

처음에는 코딩을 잘못한줄 알고 이짖 저짖 해보고가 

리소스를 추가하는 곳이 따로 있었다는 것을 방금 알게 됐다. -_-;;










위의 그림처럼 프로젝트명 -> Target 에서 APP 선택 -> Build Phases 에 가면 

copy Bundle Resources 라는 항목이 있다. 

여기서 +버튼 눌러주고 추가 해 주면 된다. 

3시간.... 젠장 -_-;  


////////////////////////////////////////////////////////////////////////////////////////


출처: http://blog.naver.com/PostView.nhn?blogId=stday&logNo=40113245339&viewDate=&currentPage=1&listtype=0


* Xcode >> Resources >> 파란색 디렉토리와 노란색 디렉토리의 차이점.

파란색: 빌드시, 리소스패스에 디렉토리 구조로 빌드된다.

노란색: 빌드시, 루트에 다 풀어져서 빌드된다.


* 리소스패스: TestApp.app (= 빌드했을때, OS에 저장되는 디렉토리) 위치.

보기에는 파일로 보이지만 실제로는 디렉토리이다.

오른쪽클릭해서 패키지보기하면 보임.

리소스 패스 안으로는 OS차원으로 접근할수없다.

예를 들어 어플 업데이트 몇개의 이미지 추가시 리소스 패스에 업데이트 못한다.

그래서 일반적으로 어플설치 디렉토리/documents에 저장해서 사용한다.





//////////////////////////////////////////////////////////////////////////////////////



출처: http://www.yoonz.net/index.php?document_srl=15171


xCode 4.2 에서 SQLite 사용하기

   - xCode 4.2 에는 Resources 폴더가 없습니다.

     (프로젝트 선택한 후 Build-Phases탭 아래쪽의 Copy Bundle Resources에 만들어 놓은 db추가 해야 합니다.)

   - 이미 만들어져 이는 db.sqlite를 불러서 NSLog();를 통해 확인해 보는 예제입니다.

   - Document에 db.sqlite 파일 복사하는 부분 넣지 않으니까 결과가 안나오더군요...

 



#import "AppDelegate.h"

#import <sqlite3.h>

@implementation AppDelegate

@synthesize window = _window;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

    

    NSString *databaseName = @"db.sqlite";

    //도큐먼트 디렉토리 위치를  얻는다.

    NSString* documentDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];    

    

    //도큐먼트 위치에 db.sqlite명으로 파일패스 설정

    NSString *filePath = [documentDirectory stringByAppendingPathComponent:databaseName];

    NSFileManager *fileManager = [NSFileManager defaultManager];

   

    // 도큐먼트에 .sqlite 파일 복사

    BOOL dbexits = [fileManager fileExistsAtPath:filePath];

    if (!dbexits)  

    {

        NSString *defaultDBPath = [[[NSBundle mainBundle]resourcePath]stringByAppendingPathComponent:databaseName];

        NSError *error;

        

        BOOL success = [fileManager copyItemAtPath:defaultDBPath toPath:filePath error:&error];

        if (!success) {

            NSAssert1(0,@"Failed to create writable database file with message '%@'.", [error localizedDescription]);

        }

    }    

    

    // 데이터베이스를 연결한다. 해당 위치에 데이터베이스가 없을경우에는 생성해서 연결한다.

    sqlite3 *database;

    if (sqlite3_open([filePath UTF8String], &database) != SQLITE_OK) {

        

        sqlite3_close(database);

        

        NSLog(@"Error");

    }

    

    

    // 테이블 생성

    char *sql = "CREATE TABLE IF NOT EXISTS test (no INTEGER PRIMARY KEY NOT NULL, name VARCHAR)";

    

    if (sqlite3_exec(database, sql, nil,nil,nil) != SQLITE_OK) {

        

        sqlite3_close(database);

        

        NSLog(@"Error");

    }

    

    

//    // 삽입 및 갱신

//    sqlite3_stmt *insertStatement;

//    char *insertSql = "INSERT or REPLACE INTO test (no,name) VALUES(?,?)";

//    

//    //프리페어 스테이트먼트를 사용

//    if (sqlite3_prepare_v2(database, insertSql, -1, &insertStatement, NULL) == SQLITE_OK) {

//        

//        //?에 데이터를 바인드

//        sqlite3_bind_int(insertStatement, 1, 1);

//        sqlite3_bind_text(insertStatement, 2, [@"홍길동" UTF8String],  -1, SQLITE_TRANSIENT);

//        

//        // sql문 실행

//        if (sqlite3_step(insertStatement) != SQLITE_DONE) {

//            NSLog(@"Error");

//            

//        }

//    }

    

   // select

    sqlite3_stmt *selectStatement;

    

    char *selectSql = "SELECT no, name FROM test";

    

    if (sqlite3_prepare_v2(database, selectSql, -1, &selectStatement, NULL) == SQLITE_OK) {

        

        // while문을 돌면서 각 레코드의 데이터를 받아서 출력한다.

        while (sqlite3_step(selectStatement)==SQLITE_ROW) {

            int no = sqlite3_column_int(selectStatement, 0);

            NSString *name = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectStatement, 1) ];

            NSLog(@"no : %i, name : %@",no,name);

        }           

    }       

    

//statement close

//    sqlite3_finalize(insertStatement);

    sqlite3_finalize(selectStatement);

    

    //db close

    sqlite3_close(database);

      

    [_window makeKeyAndVisible];

    return YES;

}


@end



http://keechanfa.tistory.com/entry/xCode-42-에서-SQLite사용하기




//////////////////////////////////////////////////////////////////////////////////////////////


출처: http://hazbola.tistory.com/237




여러 ios 개발자분들이 가장 귀찮게 생각하시는게 바로 이미지 리소스 관리라고 생각한다.

하다 보면 여러 이것저것 귀찮은게 많다

- 같은 이름 안된다

- 마우스로 xcode에 넣어주고 또 중복되면 에러뜬다 

 
누구나 한번쯤 귀찮게 생각하신거라고 생각한다 

이미지로 설명해보겠습니다 




 

이게 우리가 흔히 보는 왼쪽 트리 리스트  ( tree List  ) 의 모습이다  폴더 색깔은 전부다 노랑이다 ㅋㅋ

이미지 있는 부분을 보자

 
자 이런식으로 이미지이름만 넣으면 된다 또는 그냥 "img1"이라고만 넣어도 되는 엄청난 편리함이 있다 ㅋㅋ

만약 이미지가 추가 되었거나 또는 변경되었다고 가정해보자 

폴더 가야하고 복사하고 넣고 또 왼쪽 트리 리스트  ( tree List  ) 넣고 등등.. 여간 귀찮은게 아니다  

자 그럼 다른 방법으로 관리 해보자 






폴더를 넣을때 이런 화면 많이 보았을것이다 


저기에서 Folder 여기 부분에 있는 "Create folder references for any added folders" 두번째를 클릭하고 폴더를 추가해보자 





그럼 이렇게 퍼렇게 폴더가 생겨서 들어갔을것이다 이건 바로 로컬에 있는 폴더 속성과 환경을 그대로 가져가는것이다 

저 design 이라는 실제 폴더에 이미지를 추가하면 왼쪽 트리 리스트  ( tree List  )의 폴더에도 똑같이 업데이트 된다는 뜻이기도 하다 

이건 무척 편리하다.

그리고 사용방법을 보자




 아까랑 비슷하지만 앞에 "/design/" 이라는 폴더만 추가해주면 사용할수 있다 


좀 귀찮게 보일수도 있지만 어떻게 보면 이게 더 가독성 놓고 편리성을 지니고 있다는걸 강조해주고 싶다 

이미지가 100개가 넘어가면 얼마나 힘든가 또 .. 만약 아이폰4 레티나 적용이라면 아오 개 빡친다 ;; ㅋㅋㅋ

2. 번들 라이브러리를 활용한 이미지 리소스 관리







쉽게 말하면 하나의 폴더인데 xcode상에서는 이쁘게 잘 꾸며저 있는 패키지 라고 생각하면 된다 

이 방법도 추천해주고 싶다. 

그럼 ios 가 냉장고랑 세탁기에 들어가는 그날 까지 피스!!

 






반응형


관련글 더보기

댓글 영역