블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2861)
Unity3D (899)
Programming (479)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (192)
협업 (65)
3DS Max (3)
Game (12)
Utility (142)
Etc (99)
Link (34)
Portfolio (19)
Subject (90)
iOS,OSX (53)
Android (16)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (19)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

[파일]

OGG Converter.zip




[링크] http://erudite.tistory.com/142

반응형
Posted by blueasa
, |
string을 byte[] 배열로 변환? 

string 문자열을 C#의 Char[] 배열로 변경하는 것은 String 클래스의 ToCharArray()라는 메서드를 사용하면 간단하다. 그렇다면, string은 byte[] 배열로 변경하는 것은 가능한가? 만약 가능했다면, string 클래스 안에 ToByteArray() 같은 메서드가 존재할 듯 한데, 이런 메서드는 존재하지 않는다. 왜냐하면, String은 직접 byte[] 변경할 수 없기 때문이다. 먼저 반대의 경우를 생각해 보자. byte[]를 직접 string으로 변경할 수 있는가? 이를 위해 우선 byte[] 가 어떤 Charset을 가지고 인코딩(Encoding) 되었는지 알아야 할 것이다. 이는 아스키, 유니코드, UTF8, GB18030 등 다양한 인코딩 방식에 따라 바이트들이 의미하는 문자가 완전히 다르기 때문이다. 따라서 byte배열을 .NET의 유니코드 string으로 변경하기 위해서는 해당 바이트가 어떤 인코딩인지 알고 이를 유니코드 String으로 변경하게 된다. 동일한 로직으로 문자열을 Byte배열로 변경할 때도 인코딩 방식에 따라 다른 바이트값들을 갖게 된다. 



String을 Byte[]로 인코딩 

문자열을 Byte[] 배열로 변경하기 위해서는 System.Text.Encoding의 인코딩 방식을 지정한 후 GetBytes() 메소드를 호출하면 된다. 예를 들어, 유니코드 인코딩을 사용하여 Byte[]로 변환하는 경우, System.Text.Unicode.GetBytes() 메서드를 호출하고, UTF8 인코딩을 사용하는 경우, System.Text.UTF8.GetBytes() 메서드를 호출하면 된다. 

예제

// String을 Char[]로 변환 
string str = "Hello 한국";
char[] uchars = str.ToCharArray();

// String은 바이트로 직접 변환할 수 없으며,
// Encoding을 통해 변환 가능. 16바이트 생성
byte[] ubytes = System.Text.Encoding.Unicode.GetBytes(str);

// 보다 컴팩트한 UTF8 인코딩. 12바이트 생성
byte[] utf8bytes = System.Text.Encoding.UTF8.GetBytes(str);




Byte[]을 String으로 변환 

Byte[] 배열을 String으로 변환하기 위해서는 바이트로 인코딩했던 동일한 인코더를 사용하여야 한다. 즉, 유니코드 인코더를 사용하여 String은 Byte[]로 변환했었다면 Encoding.Unicode.GetString()을 사용하여 Byte 배열을 문자열로 변경한다. 

예제

using System.Text;

// Byte Array를 String으로 변환 
string s1 = Encoding.Unicode.GetString(uniBytes);
string s2 = Encoding.UTF8.GetString(utf8bytes);




char[]을 String으로 변환 

char[] 배열을 String으로 변환하는 것은 간단하다. C#에서 char는 이미 유니코드이고, string 문자열은 이런 유니코드 문자 요소들의 집합이므로 String 생성자에 문자배열을 직접할당하여 변환할 수 있다. 




BASE64 인코딩 

Byte[] 배열을 웹상에서 전송하기 위해 많이 사용되는 방식으로 BASE64 인코딩을 들 수 있다. 송신 쪽에서는 Convert.ToBase64String(byte[])를 사용하여 바이트들을 BASE64 인코딩된 문자열로 변경하고 String을 전송하게 되고, 수신 쪽에서는 Convert.FromBase64String(string)을 사용하여 BASE64 인코딩된 문자열을 다시 바이트 배열로 변경하여 사용하게 된다. 

예제

// Byte Array를 BASE64 Encoding
string s64 = Convert.ToBase64String(utf8bytes);

// BASE64 인코딩한 String을 다시 Byte Array로
byte[] bytes64 = Convert.FromBase64String(s64);



[출처] http://www.csharpstudy.com/Tip/Tip-string-encoding.aspx

반응형
Posted by blueasa
, |
아이튠즈(iTunes) 폴더 저장위치 변경하기

아이패드를 이용하기 위해서는 아이튠즈(iTunes)를 PC에 설치해서 사용해야 합니다. 아이튠즈(iTunes)에 아이패드,아이폰을 연결하면 자동으로 백업을 진행 하지요.

 

전 아이패드를 많이 사용안하는데 백업된 자료가 약 8기가 가까이 됩니다. 아이패드를 많이 사용하신다면 용량은 더 크겠지요.

 

아이튠즈가 차지하는 용량이 문제가 안되는 사용자는 이 글이 도움이 안될것이지만 저처럼  VHDX를 이용해서 윈도우를 사용하는 사용자, 용량 작은 SSD사용하는 사용자라면 아이튠즈(iTunes)가 찾이 하는 용량이 부담이 될것입니다.

 

그리고 VHDX를 이용해 자주 윈도우를 밀어버리고 새로운 윈도우를 사용한다면 그것도 불편함을 야기합니다.

 

그래서 저는 아예 아이튠즈(iTunes)폴더를 다른 드라이브로 옮겨 사용하고 있는데 그 방법을 올려볼까 합니다.

 

아이튠즈(iTunes) 폴더 다른 드라이브로 옮겨 사용하기

 

방법은 아주 간답합니다. 한가지 이 글은 윈도우즈 8.1에서 작성되었으니 폴더경로가 다른 운영체제에서는 약간 다를수 있습니다.

 

그럼 시작해 보겠습니다.

 

탐색기에서 왼쪽 표시한 부분 '음악'폴더안에 iTunes폴더가 있습니다. 위 이미지처럼 아이튠즈(iTunes)폴더를 선택하고 마우스 오른쪽 버튼을 눌러 '잘라내기'를 선택 하세요.

 

그리고 아이튠즈(iTunes)폴더를 옮길 드라이브로 이동해서 (전 F드라이브로 지정) 마우스 오른쪽 버튼을 눌러 '붙혀넣기'를 하시면 폴더가 이동됩니다.

 

폴더가 이동되면 바탕화면이나 아이튠즈(iTunes)가 설치된 폴더로 가서 'iTunes'을 실행하는데 이때 키보드 Shift키를 누른 상태에서 아이튠즈를 실행시킵니다.

 

그럼 위 이미지 처럼 'iTunes 보관함'선택 창이 뜹니다. '보관함 선택...'을 클릭하세요.

 

파일 선택 창이 열리는데 iTunes폴더를 이동해 놓으신 드라이브로 가셔서 iTunes폴더안에 'iTunes Library.itl'파일을 선택 후 '열기'버튼을 클릭 합니다.

 

그럼 아이튠즈(iTunes) 폴더 저장위치가 변경되었습니다.

 

 

확실히 확인하기 위해 아이튠즈(iTunes)가 실행되면 '메뉴 -> 기본설정'을 선택해서 '고급'텝을 선택하시면 변경되 경로를 보실수 있습니다.

 

간단하게 아이튠즈(iTunes) 폴더 저장위치를 변경해서 C:드라이브 용량을 확보 하세요.



출처: http://pastimelife.com/566 [잡다한 세상]


반응형
Posted by blueasa
, |

보내는 메일에 자동으로 본인이 숨은참조가 되도록하면 메일 관리가 보다 편리해 집니다.

보낼 때 마다 숨은 참조에 추가하면 되지만 귀찮기 때문에 자동으로 추가되도록 설정해 봅시다.

 

아웃룩 실행 후 Alt + F11 을 누르면 아래와 같은 창이 뜹니다.

 

ThisOutlookSession을 더블클릭하면 입력 창이 나오고 아래 내용을 입력합니다.

 

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
 Dim objMe As Recipient
 Set objMe = Item.Recipients.Add("email@email.com")
 objMe.Type = olBCC
 objMe.Resolve
 Set objMe = Nothing
 End Sub

 

email@email.com 부분에는 본인의 이메일을 입력합니다.

 

 

저장 완료 후

[파일] - [옵션] - [보안 센터] -[보안 센터 설정] - [매크로 설정] 으로 이동한 후

[모든 매크로 실행]을 체크합니다.

 

보안이 우려 되신다면 [모든 매크로에 대해 알림 표시]를 선택합니다.

매크로 실행시 알람이 뜨기 때문에 위의 매크로를 등록 할 경우 아웃룩 실행 시 마다 알람이 나타납니다.

그때 매크로 실행을 선택해 주시면 됩니다.

 

 

 

 

아웃룩을 다시 실행하시면 이제 메일을 보낸 경우 본인에게 자동으로 숨은 참조가 되는 것을 확인 하실 수 있습니다.

메일 작성 시 숨은참조 영역엔 아무 표시도 되있지 않지만 발송 시 매크로를 통해 본인의 메일이 숨은 참조로 추가되게 됩니다.

 

참고 : http://gmate.tistory.com/296



출처: http://noota.tistory.com/entry/outlook-2013-%EB%B3%B8%EC%9D%B8-%EC%9E%90%EB%8F%99-%EC%88%A8%EC%9D%80-%EC%B0%B8%EC%A1%B0 [누더기]

반응형
Posted by blueasa
, |

UDID, UUID, 유니크 한 고정 값 완결



먼저 각 명칭에 대해 알아보도록 한다.



UUID - Universally Unique Identifire ( 시간, 공간을 이용하여 뽑아낸 128bit (중복되지 않는) 값 )

GUID - Globaly Unique Identifire ( UUID 와 같은 MS 에서 사용하는 값 )

UDID - Unique Device Identifire ( 기기 별 고유 식별 값 )


Vendor Identifier - 공급 업체 식별자

Advertising Identifier - 광고 식별자





기기별 고유값을 얻어오기 위해 이전 ( IOS 4 이하 ) 에서는 UDID 값을 가져와 사용 할 수 있었다.

그러나 이후 해킹 등에 취약하다는 이유로 사용 금지 시키고 IOS 5 부터는 UUID 를 사용하라고 권고하였다.


CFUUIDRef udid = CFUUIDCreate(NULL);
NSString *udidString = (NSString *) CFUUIDCreateString(NULL, udid);

위는 UUID 얻는 방법이다.  ( IOS 5 에서 )

IOS 6 에서는 아래와 같이 간편하게 얻을 수 있다.


NSString *uuid = [[NSUUID UUID] UUIDString];

이는 시간, 공간 값을 이용하여 128bit 를 이용해 얻어내여 중복 가능성이 없다고 한다.


얻어진 결과의 예제는 는 다음과 같다.

BE5BA3D0-971C-4418-9ECF-E2D1ABCB66BE


이를 사용하여, 유니크한 값으로 사용할 수는 있다.

다만 호출시마다 유니크한 값을 준다.


따라서 이 값으로 기기를 식별하거나 할 수 없다.


이를 사용하기 위해 키체인을 사용하여 저장하는 방법도 있다.

해당 방법은 아래와 같다.


접기

[UUID 키체인 저장 방법]

KeyChain API들은 Security.framework에 정의 되어 있는데 C함수로 되어 있고 API를 쓰는 것이 쉽지 않아 애플에서 쉽게 사용할 수 있게 KeychainItemWrapper 예제 클래스를 제공하고 있다.

일단 KeychainItemWrapper를 다운 받고 프로젝트에 추가해야 한다. (download)


    KeychainItemWrapper.h

    KeychainItemWrapper.m


아래는 UUID를 생성해서 KeyChain에 저장하는 함수 이다.

//처음에 UUID KeyChain에서 불러오는데 nil이라면 UUID 생성해서 KeyChain 저장한다.

//저장 후에 다시 함수를 호출 하면 저장된 값을 리턴한다.

- (NSString*) getUUID

{

    // initialize keychaing item for saving UUID.

    KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"UUID" accessGroup:nil];

   

    NSString *uuid = [wrapper objectForKey:(__bridge id)(kSecAttrAccount)];


    if( uuid == nil || uuid.length == 0)

    {

        // if there is not UUID in keychain, make UUID and save it.

        CFUUIDRef uuidRef = CFUUIDCreate(NULL);

        CFStringRef uuidStringRef = CFUUIDCreateString(NULL, uuidRef);

        CFRelease(uuidRef);

        uuid = [NSString stringWithString:(__bridge NSString *) uuidStringRef];

        CFRelease(uuidStringRef);

        

        // save UUID in keychain

        [wrapper setObject:uuid forKey:(__bridge id)(kSecAttrAccount)];

    }

    

    return uuid;

}


KeyChin에 대하여 설명을 하면..

KeychainItemWrapper를 사용하여 키체인에 값을 등록하게 되는데..

- (id)initWithIdentifier: (NSString *)identifier accessGroup:(NSString *) accessGroup


//내부 앱에서만 사용할 경우 

KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"UUID" accessGroup:nil];


//Keychain Group끼리 공유할 경우

KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"UUID" accessGroup:@"???????.com.yourcompany.GenericKeychainSuite"];


KeychainItemWrapper 인스턴스를 생성할 때 저장할 값을 구별할 이름(initWithIdentifier)과 accessGroup을 지정해야 한다.


- accessGroup은 KeyChain Group을 지정하는 것인데 nil이면 내부 앱에서만 사용하는 것이고 nil이 아닌 값을 사용하면 같은 Keychain Group을 사용하는 앱에서 공유가 가능하다.


- Keychain Group을 확인하는 방법은 xcode6에서는 프로젝트 > TARGETS 프로젝트 > capabilities > Keychain Sharing 에서 확인하면 된다. (xcode5, 6)


- (id)objectForKey:(id)key


//키체인에 저장된 값을 가져온다.

NSString *uuid = [wrapper objectForKey:(__bridge id)(kSecAttrAccount)];


- (void)setObject:(id)inObject forKey:(id)key


// 키체인에 저장한다.

[wrapper setObject:uuid forKey:(__bridge id)(kSecAttrAccount)]; 


- KeychainItemWrapper를 사용하여 데이터를 저장할 때 사용할 수 있는 상수는 아래와 같다.

  (https://developer.apple.com/library/ios/documentation/Security/Reference/keychainservices/index.html)

   1) kSecAttrAccount : Account 정보

   2) kSecAttrLabel : 라벨 정보

   3) kSecAttrDescription : 설명

   4) kSecValueData : Data


- 예를들어 암호화된 비밀번호를 저장하기 위해서 kSecValueData를 Key로 하고 암호화된 비밀번호를 InObject로 하면 된다. 로그인 이름을 저장한다면 kSecAttrAccount를 Key로 하고 저장하면 된다.


[참고]

http://10apps.tistory.com/archive/20130403

http://dev-metal.blogspot.kr/2010/08/howto-use-keychain-in-iphone-sdk-to.html



다음으로 

identifireForVender 의 설명이다.


1. 설치된 앱에서 호출 시 매번 같은 값을 리턴한다.

2. 다만 앱 재 설치 시 값이 바뀐다.

3. 같은 벤더를 사용하는 경우 값이 유지 된다,

    다만같은 벤더를 사용하는 앱을 모두 지울 경우 마찬가지로 값이 바뀐다.


따라서 identifireForVender 값도 영원한 기기 식별자로 사용 할 수 없다.






유니티의 SystemInfo.deviceUniqueIdentifier



Android 


 - readPhoneState 퍼미션이 설정되어있을 경우

   IMEI 값 리턴

   ex) 51F30A87-BBFA-128F-E915-C92391D2F164


 - readPhoneState 퍼미션이 설정되어있지 않을 경우

   AndroidID 값 리턴

   ex) 8127362567812635



IOS


 - IOS6 버젼 이전

   MAC_ADRESS 값을 해싱 하여 리턴


 - IOS7 버젼 이후

   ASIdentifierManager advertisingIdentifier 값을 리턴

   어떤 이유에서 이 값을 리턴 할 수 없는 경우 

   UIDevice identifierForVendor 를 리턴


[출처] http://flystone.tistory.com/149

반응형
Posted by blueasa
, |


[링크] http://gold-kitten.tistory.com/29

반응형
Posted by blueasa
, |

[에러메시지]

Library not loaded: @rpath/libswiftCore.dylib



위 메시지는 여러가지 이유로 뜨는 것 같은데 나의 경우는 엔터프라이즈 인증서에 OU attribute가 없어서 생긴 문제였다.


인증서를 새로 받아서 OU 필드가 뽑혀 나오면서 해결했음.



[내용 출처] http://stackoverflow.com/questions/26024100/dyld-library-not-loaded-rpath-libswiftcore-dylib


As the AirSign guys state the problem roots from the missing OU attribute in the subject field of the In-House certificate.

Subject: UID=269J2W3P2L, CN=iPhone Distribution: Company Name, OU=269J2W3P2L, O=Company Name, C=FR

I have an enterprise development certificate, creating a new one solved the issue.


반응형
Posted by blueasa
, |
* Restarting Xcode, iPhone, computer
* Cleaning & rebuilding
* Revoking and creating new certificate/provision profile
* Runpath Search Paths is $(inherited) @executable_path/Frameworks
* Embedded Content Contains Swift Code is 'Yes'
* Code Signing Identity is developer

참조 :




[출처] http://nowdeveloper.blogspot.kr/2016/04/dyld-library-not-loaded_20.html

반응형
Posted by blueasa
, |

Apple Developer 사이트에서 Certificate와 Provisioning을 진행한 후에도 iPhone / iPad device에서 app launch 시 아래와 같은 에러가 발생하면서 app이 실행되지 않는 경우가 있음.


dyld: Library not loaded: @rpath/libswiftCore.dylib


 Stack Overflow를 뒤져보면 다음과 같은 방법을 알려준다.


1. build option에서 'Embedded Content Contains Swift Code'를 'Yes'로 설정

2. build option에서 'Runpath Search Paths'를 '@executable_path/Frameworks'로 설정

3. certificates와 provisioning을 revoke하고 다시 등록 / 다운로드 진행하라

4. 설치된 certificates와 provisioning의 'Trust'(신뢰) 설정을 'Use System Default'(시스템 초기 설정 사용)으로 하라


 그러나 이러한 방법으로도 문제가 해결되지 않았다.

 그래서 일 년에 지원 2번의 압박을 감수하며 Apple DTS에 문의한 결과 위의 4번 방법을 이용해 다시 시도해보라고 답변이 왔다.

 문제는 이미 저렇게 사용하고 있었다는 것인데, 메일을 잘 보니 WWDR(Apple Worldwide Developer Relations Certification Authority)도 4번으로 설정하라고 하였는데 해당 인증서가 존재하지 않았다.

검색 후 해당 인증서를 다운로드 받아서 launching 해보니 거짓말같이 문제 해결.

위 1~4번 방법으로 해결되지 않을 경우 아래 WWDR을 다운로드 받아서 시도하길 추천.


http://developer.apple.com/certificationauthority/AppleWWDRCA.cer



[출처] http://loventree.tistory.com/2

반응형
Posted by blueasa
, |


[Link] https://github.com/asus4/unity-taptic-plugin



[File]

unity-taptic-plugin-master.zip


반응형
Posted by blueasa
, |