'개발'에 해당되는 글 207건

NFC Xcode 설정

개발/Note 2020. 5. 29. 10:11
반응형
<?xml version="1.0" encoding="UTF-8"?>

http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">

<array>

<string>nfc</string>

<string>armv7</string>

</array>

</plist>

 

<?xml version="1.0" encoding="UTF-8"?>

http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">

<string>NFC tag to read NDEF messages into the application</string>

</plist>

 

 

 

반응형

'개발 > Note' 카테고리의 다른 글

duplicate symbol 에러 해결  (0) 2020.06.16
Luhn 알고리즘  (0) 2020.06.02
NFC (Near Field Communication)  (0) 2020.05.29
NFC Tag 저장용량  (0) 2020.05.29
NDEF  (0) 2020.05.29
블로그 이미지

SKY STORY

,
반응형

RFID(무선 주파수 통신) 기술의 총체로 

카드 모드, 태그 쓰기/읽기 모드, P2P 모드로 사용할 수 있다.

 

NDEF (NFC Data Exchange Format)

NFC 데이터 교환에 이용되는 데이터 교환 포멧으로 NFC 포럼에서 정의

 

NDEF Message

기본적인 NFC 데이터 교환 메시지 단위 하나를 NDEF Message라고 한다.

하나의 NDEF Message는 한개 이상의 NDEF Record로 구성되며, 하나의 NDEF Record는 하나의 데이터를 가지고 이를 

'페이로드(payload)' 라고 한다.

 

 

개념도

이미지 : http://ibadrinath.blogspot.kr/2012/07/nfc-data-exchange-format-ndef.html

 

 

NDEF Record 구성

항목

길이

설명

레코드 헤더 (header)

1byte

레코드에 대한 기본적인 정보

타입 길이 (type length)

1byte

데이터 타입의 길이

페이로드 길이 (payload length)

1byte 혹은 4byte

페이로드의 길이

ID 길이 (id length)

1byte

ID 길이

타입 (type)

'타입 길이' byte

레코드가 담고 있는 페이로드의 타입

ID

'ID 길이' byte

페이로드 ID

페이로드 (payload)

'페이로드 길이' byte

레코드가 담고 있는 페이로드

-표 출처 : http://blog.startnfc.com/entry/NDEF

 

 

레코드 헤더(header)의 구성

헤더 항목

길이

설명

MB (Message Begin)

1bit

NDEF 메시지의 레코드는 비트가 1 입니다.

ME (Message End)

1bit

NDEF 메시지의 마지막 레코드는 비트가 1입니다.

CF (Chunk Flag)

1bit

하나의 페이로드를 여러 개의 레코드로 나누어 전송하는 경우가 있는데, 이때 사용합니다.

SR (Short Record)

1bit

비트가 1이면 '페이로드 길이' 크기는 1byte이고, 0이면 4byte입니다.

IL (ID Length)

1bit

레코드 ID 존재하는 경우 비트가 1입니다.

TNF (Type Name Format)

3bit

(별도로 설명)

-표 출처 : http://blog.startnfc.com/entry/NDEF

 

 

NDEF Record - 타입(type)과 TNF

인터넷에 존재하는 대부분의 콘텐츠는 MIME 타입으로 구분이 가능하다.

하지만 NFC에서는 MIME 타입 이외에 다른 타입도 포함한다.

TNF는 위와 같은 타입이 어떤 형태로 되어 있는지를 나타낸다.

Android 에서 사용되는 TNF의 종류는 아래와 같다.

 

TNF_ABSOLUTE_URI

TNF_EMPTY

TNF_EXTERNAL_TYPE

TNF_MIME_MEDIA

TNF_UNCHANGED

TNF_UNKNOWN

TNF_WELL_KNOWN

(자세한 사항은 클릭)

 

 

3비트 TNF의 구성

TNF (Type Name Format)

설명

Empty

0x00

비어있는 레코드. , 페이로드가 없음.

WKT (NFC Forum well-known type)

0x01

NFC 포럼에서 정의한 타입 형식. (: URI, Text, Smart Poster)

MIME (MIME Media type)

0x02

MIME 타입 형식. (: plain/text, image/jpeg)

AURI (Absolute URI type)

0x03

예를 들어 XML 경우 URI 형식의 DTD XML Schema 타입으로 사용함. (http://www.w3.org/TR/html4/strict.dtd, http://www.w3.org/2000/svg)

EXT (NFC Forum external type)

0x04

NFC 포럼에서 정의한 규칙대로, 임의의 타입 형식을 만들어 사용할 있음. (: startnfc.com:U)

Unknown

0x05

없는 형식의 페이로드. 그냥 byte 덩어리로 취급됨.

Unchanged

0x06

데이터를 여러 조각으로 나누어 전송하는 경우 (chunked record) 이전 레코드의 타입과 같은 타입이라는 것을 나타내기 위해 사용.

Reserved

0x07

사용하지 않음.

- 출처http://blog.startnfc.com/entry/NDEF

 

2020/12/16 - [개발노트] - Code 128 Barcode의 Check Digit 계산방법

2020/12/15 - [iOS/Tips] - 디버깅 차단 처리 (Anti Debug)

2020/12/14 - [iOS/Tips] - bundle id 알아내기

2020/12/12 - [AI/Algorithm] - 2D 충돌처리

2020/12/11 - [iOS/Swift] - UIViewController 스위칭

2020/12/11 - [개발노트] - PlantUML 설치 (Mac OS X)

2020/12/11 - [개발노트] - 특수문자 발음

2020/12/10 - [iOS/Objective-C] - 웹뷰에서 javascript 함수 동기식 호출

2020/12/10 - [iOS/Tips] - Fat Static Library 빌드 (2/2)

2020/12/10 - [iOS/Tips] - Fat Static Library 빌드 (1/2)

2020/12/10 - [iOS/Tips] - Custom UserAgent 설정

2020/12/10 - [iOS/Tips] - CocoaPods 설치 및 제거

2020/12/10 - [iOS/Tips] - Clang diagnostic 경고 무시하기

2020/12/10 - [개발노트] - Bluetooth UUID

2020/12/08 - [개발노트] - 모바일 앱 메모리덤프 이슈 해결방법

 

반응형

'개발 > Note' 카테고리의 다른 글

Luhn 알고리즘  (0) 2020.06.02
NFC Xcode 설정  (0) 2020.05.29
NFC Tag 저장용량  (0) 2020.05.29
NDEF  (0) 2020.05.29
Mifare  (0) 2020.05.29
블로그 이미지

SKY STORY

,

NFC Tag 저장용량

개발/Note 2020. 5. 29. 10:06
반응형
반응형

'개발 > Note' 카테고리의 다른 글

NFC Xcode 설정  (0) 2020.05.29
NFC (Near Field Communication)  (0) 2020.05.29
NDEF  (0) 2020.05.29
Mifare  (0) 2020.05.29
QR 코드 결제 타입  (0) 2020.05.29
블로그 이미지

SKY STORY

,

NDEF

개발/Note 2020. 5. 29. 10:02
반응형

목차 

1. NDEF

NDEF(NFC Data exchange Format)는 NFC를 이용한 데이터 통신에서 사용하는 "데이터 교환 형식"이다. 대부분의 NFC 태그는 NDEF 형식으로 저장된 데이터를 전송하는 passive elements로 작동한다. 우리가 폰을 이용해서 NFC 태그에 접촉하면, 애플리케이션은 NDEF 데이터를 읽는다.

 

2. NDEF 메시지와 NDEF 레코드

NDEF 메시지는 하나 이상의 NDEF 레코드로 구성된다. NDEF 메시지가 인캡슐할 수 있는 레코드의 갯수는 애플리케이션과 태그 타입에 따라 다르다. NDEF 레코드는 "Header"와 "PayLoad"로 구성된다 아래 그림은 NDEF의 메시지 구성이다.

 

 

아래는 NFC Tag로 부터 읽은 데이터의 hexa code의 예제다. "joinc.com"을 전송했다.

1

 

 

03 0e d1 01 0a 55 03 6a 6f 69 6e 63 2e 63 6f 6d 0a

 

 

 

 

  • 03 : 레코드의 타입이다. NDEF 레코드는 03을 사용한다.
  • 0e : 페이로드의 길이다. 단위는 바이트다.
  • d1 : 가변길이 레코드다. 여기에 담고 있는 정보를 아래에 정리했다.1





    d1 을 바이너리 값으로 변환하면 11010001


  • MB = 1 : 이 레코드는 NDEF 메시지의 첫번째 레코드다.
  • ME = 1 : NDEF 메시지의 마지막 레코드다. 이 값이 0이면 아직 레코드가 더 남아있음을 의미한다.
  • CF = 0 : chunked 메시지가 아니다.
  • SR = 1 : 짧은 레코드인지 아닌지. 레코드가 페이로드를 가지지 않는다면 0을 설정한다.
  • IL = 0 : ID Length를 설정할지를 결정한다. 값이 1 이면 ID_LENGTH 필드가 헤더에 1 옥텟의 크기로 설정된다.
  • TNF = 001 : Type 필드의 값을 명시한다. 0x01은 NFC Forum webll-known type이다. 

  • 01 (Type Length) : TYPE_LENGTH 필드는 8-bit 부호없는 정수형으로 TYPE 필드의 길이를 명시한다. TNF가 0x00, 0x05, 0x06이면 항상 0이다.
  • 0a (Payload Length) : 부호없는 integer 타입이다. Payload length 필드의 크기는 SR flag에 의해서 결정된다.
  • 55 : 페이로드의 데이터 타입이다. ASCII 테이블에서 55는 'U'로, URL 타입의 데이터를 의미한다.
  • 03 : 0x03은 URI identifity다.("http://")
  • Payload : 6a 6f 69 6e 63 2e 63 6f 6d 0a (joinc.com)

 

 

3. 참고

 

 

출처 : https://www.joinc.co.kr/w/man/12/NDEF#toc

반응형

'개발 > Note' 카테고리의 다른 글

NFC (Near Field Communication)  (0) 2020.05.29
NFC Tag 저장용량  (0) 2020.05.29
Mifare  (0) 2020.05.29
QR 코드 결제 타입  (0) 2020.05.29
Base64 encode / decode in C++  (0) 2020.05.29
블로그 이미지

SKY STORY

,

Mifare

개발/Note 2020. 5. 29. 10:01
반응형

1. 개요

네덜란드 NXP반도체[1]의 RF 기술. 이용하는 주파수는 13.56MHz로, 국제표준 규격인 ISO/IEC 14443 Type A와 일부 호환된다. 원래는 Mikron에서 개발한 것이라 이름도 Mikron Fare Collecting System의 두문자어로 MIFARE가 되었는데, 이 기술을 필립스가 현질해서 관련 제품을 생산하기 시작했다.

 

2. 종류

MIFARE 카드는 스마트카드의 일종이지만, 가장 처음에 등장한 MIFARE Classic 1K/4K 카드는 안테나가 달린 외장 메모리였다. 암호화같은 건 정말 팬티 한 장 걸친 수준으로만 해 놓고, 단말기에 접촉해서 정보를 읽고 쓰는 것만 가능하게 만든 것이다. 따라서 보안성이 떨어진다. 이름에서 알 수 있듯이 1K는 1,024바이트, 4K는 4,096바이트를 저장할 수 있다. 유패스가 MIFARE Classic 1K를 이용해서 세계 최초로 상용화된 교통카드다. 대경교통카드도 MIFARE Classic이다. 아예 칩셋까지 NXP 제품을 이용 중. 유패스는 일부 카드만 NXP 제품이다.

일회용으로 쓰기엔 Classic도 오버스펙이라고 해서 MIFARE Ultralight와 MIFARE Ultralight C도 나와 있다. Ultralight는 저장 용량도 512바이트에 암호화 없이 생으로 정보를 기록한다(...) Ultralight C는 보안을 눈꼽만큼 신경써서, 192바이트의 저장 용량에 Triple DES를 올려서 나왔다. 둘 다 일회용 RF 티켓에 사용할 목적으로 개발되었다. 하지만 간혹 울트라라이트를 올려서 나오는 NFC 공태그도 보인다. 대표적으로 LG전자 옵티머스 LTE TAG와 옵티머스 G옵티머스 뷰2 박스에 번들로 들어갔던 LG Tag+(...)가 있다.

가장 대중적으로 쓰이는 것 중에 MIFARE DESFire가 있다. NFC 리더기로 읽어보면 간혹 카드 종류를 MIFARE SmartMX라고도 읽는다. ISO/IEC 14443 표준에 맞는 모델로, 카드 내부에 8051 마이크로프로세서를 탑재하고 Triple DES와 AES를 올려서 나왔다. 티머니와 OysterOV-Chipkaart 등에 절찬리 이용 중. 문제는 이 모델이 2011년에 해킹되었다는 것(...) 후속작으로 보안이 강화되고 DESFire와 하위호환이 되는 MIFARE DESFire EV1이 나왔다.

MIFARE Classic의 보안 수준이 허접한 관계로, 강화된 보안 모듈을 끼워넣은 MIFARE Plus가 나왔다. 메모리는 2K/4K 두 종류로 나왔고 128비트 암호화를 지원하는 듯.

한국은 ISO/IEC 14443기반의 대한민국 표준규격인 KS X 6924 표준으로 정하면서 MIFARE에서 벗어나게 되었다.

 

출처 : https://namu.wiki/w/MIFARE

 

2020/12/16 - [개발노트] - Code 128 Barcode의 Check Digit 계산방법

2020/12/15 - [iOS/Tips] - 디버깅 차단 처리 (Anti Debug)

2020/12/14 - [iOS/Tips] - bundle id 알아내기

2020/12/12 - [AI/Algorithm] - 2D 충돌처리

2020/12/11 - [iOS/Swift] - UIViewController 스위칭

2020/12/11 - [개발노트] - PlantUML 설치 (Mac OS X)

2020/12/11 - [개발노트] - 특수문자 발음

2020/12/10 - [iOS/Objective-C] - 웹뷰에서 javascript 함수 동기식 호출

2020/12/10 - [iOS/Tips] - Fat Static Library 빌드 (2/2)

2020/12/10 - [iOS/Tips] - Fat Static Library 빌드 (1/2)

2020/12/10 - [iOS/Tips] - Custom UserAgent 설정

2020/12/10 - [iOS/Tips] - CocoaPods 설치 및 제거

2020/12/10 - [iOS/Tips] - Clang diagnostic 경고 무시하기

2020/12/10 - [개발노트] - Bluetooth UUID

2020/12/08 - [개발노트] - 모바일 앱 메모리덤프 이슈 해결방법

 

반응형

'개발 > Note' 카테고리의 다른 글

NFC Tag 저장용량  (0) 2020.05.29
NDEF  (0) 2020.05.29
QR 코드 결제 타입  (0) 2020.05.29
Base64 encode / decode in C++  (0) 2020.05.29
iPhone SDK location on hard drive  (0) 2020.05.29
블로그 이미지

SKY STORY

,

클로저(Closure)

개발/iOS 2020. 5. 29. 09:49
반응형

클로저(Closure)

  • 클로저(closure)는 내부함수가 외부함수의 맥락(context)에 접근할 수 있는 것을 가르킨다. 클로저는 자바스크립트를 이용한 고난이도의 테크닉을 구사하는데 필수적인 개념으로 활용된다.
  • 예제 코드
function outter(){
    var title = 'coding everybody'; // 외부 함수
    return function(){  // 내부 함수
        alert(title);
    }
}
inner = outter(); // 결과값이 없다.
inner(); // 실행 결과는 alert(title);

 

  • 클로저란 내부함수가 외부함수의 지역변수에 접근 할 수 있고, 외부함수는 외부함수의 지역변수를 사용하는 내부함수가 소멸될 때까지 소멸되지 않는 특성을 의미한다.

 

클로저를 이용해서 private Method 흉내내기

  • 아래는 프라이빗 함수와 변수에 접근하는 퍼블릭 함수를 정의할 수 있는 클로저를 사용하는 방법을 보여주는 코드가 있다. 이렇게 클로저를 사용하는 것을 모듈 패턴이라 한다.
var counter = (function() { // 익명 함수 안에서 만들어진다
  var privateCounter = 0;
  function changeBy(val) {
    privateCounter += val;
  }
  return { // Return 객체
    increment: function() {
      changeBy(1);
    },
    decrement: function() {
      changeBy(-1);
    },
    value: function() {
      return privateCounter;
    }
  };
})();

console.log(counter.value()); // logs 0
counter.increment();
counter.increment();

// 클로져 바인딩 시키기
function showHelp(help) {
  document.getElementById('help').innerHTML = help;
}

function setupHelp() {
  var helpText = [
      {'id': 'email', 'help': 'Your e-mail address'},
      {'id': 'name', 'help': 'Your full name'},
      {'id': 'age', 'help': 'Your age (you must be over 16)'}
    ];

  for (var i = 0; i < helpText.length; i++) {
    (function() {
       var item = helpText[i];
       document.getElementById(item.id).onfocus = function() {
         showHelp(item.help);
       }
    })(); // 익명 클로저를 사용하여 바인딩할 수 있다.
  }
}

setupHelp();
console.log(counter.value()); // logs 2
counter.decrement();
console.log(counter.value()); // logs 1

 

Let 키워드 사용하기

  • let 키워드를 사용하면 블록 범위 변수를 바인딩함으로써 추가적인 클로저를 사용하지 않아도 된다.
function showHelp(help) {
  document.getElementById('help').innerHTML = help;
}

function setupHelp() {
  var helpText = [
      {'id': 'email', 'help': 'Your e-mail address'},
      {'id': 'name', 'help': 'Your full name'},
      {'id': 'age', 'help': 'Your age (you must be over 16)'}
    ];

  for (var i = 0; i < helpText.length; i++) {
    let item = helpText[i];
    document.getElementById(item.id).onfocus = function() {
      showHelp(item.help);
    }
  }
}

setupHelp();

 

Reference

 

 

2020/05/29 - [개발노트] - QR 코드 결제 타입

2020/05/29 - [iOS/Objective-C] - Objective-C Block Syntax

2020/05/29 - [iOS/Objective-C] - Detect permission of camera in iOS

2020/05/29 - [iOS/Swift] - WKWebView에서 history back 처리

2020/05/29 - [iOS/Objective-C] - OpenGL ES View Snapshot

2020/05/29 - [iOS/Objective-C] - Merge two different images in swift

2020/05/29 - [프로그래밍/C, C++] - Base64 encode / decode in C++

2020/05/29 - [OS/Mac OS X] - iPhone SDK location on hard drive

2020/05/29 - [iOS/Objective-C] - NSString <-> CBUUID 변환

2020/05/29 - [개발노트] - HTTP Content-Type

2020/05/28 - [iOS/Swift] - SEED 블록암호 알고리즘 CBC (Cipher Block Chaining) 예제

2020/05/28 - [개발노트] - HMAC SHA256

2020/05/26 - [iOS/Swift] - Array <-> Data 변환

2020/05/25 - [분류 전체보기] - UserAgent 추가

2020/05/25 - [iOS/Swift] - RSA 암호화 / 복호화

반응형

'개발 > iOS' 카테고리의 다른 글

WKWebView  (0) 2020.06.01
네비게이션바 투명 처리  (0) 2020.05.29
Objective-C Block Syntax  (0) 2020.05.29
Detect permission of camera in iOS  (0) 2020.05.29
WKWebView에서 history back 처리  (0) 2020.05.29
블로그 이미지

SKY STORY

,
반응형
반응형

'개발 > Note' 카테고리의 다른 글

NDEF  (0) 2020.05.29
Mifare  (0) 2020.05.29
Base64 encode / decode in C++  (0) 2020.05.29
iPhone SDK location on hard drive  (0) 2020.05.29
HTTP Content-Type  (0) 2020.05.29
블로그 이미지

SKY STORY

,
반응형
typedef 로 타입으로 만들기
typedef RETURN_TYPE (^NAME)(PARAMETERS...);

정의 예제(Definition Example):
typedef void (^SomeHandler)(NSError *error);

구현 예제(Implementation Example):
- (void)someWorkWithCompletion:(SomeHandler)handler {
  ...
}
이름이 리턴 타입 뒤에, 즉 중간에 끼어 있기 때문에 많이 헷갈린다. 



바로 Parameter Field 로 정의하기
fieldName:(RETURN_TYPE (^)(PARAMETERS...))parameterName

정의 예제(Definition Example):
- (void)someMethodWithCompletion:(void (^)(NSData *data))completionHandler;

구현 예제(Implementation Example):
[someClass someMethodwithCompletion:^(NSData *data) {
  ...
}];



Property로 정의하기
RETURN_TYPE (^)(PARAMETERS...)

정의 예제(Definition Example):
@property (nonatomic, strong) void (^completionHandler)(NSData *data);

구현 예제(Implementation Example):
someClass.completionHandler = ^(NSData *data) {
  ...
};
프로퍼티로 정의하는 경우에도 이름이 가운데에 끼어서 좀 불안한(?) 모양세다.



변수로 생성하기
RETURN_TYPE (^BLOCK_NAME)(PARAMETER_TYPES...) = ^RETURN_TYPE(PARAMETERS...) { ... };

구현 예제(Implementation Example):
void (^someBlock)(NSData *) = ^void(NSData *data) {
  ...
};

[obj methodUsingBlock:someBlock];
[obj anotherMethodUsingBlock:someBlock];
만약 블럭을 여러 곳에서 공통적으로 쓴다면 변수 등으로 정의해서 참조 할 수 있다.


블럭 외부의 변수를 블럭 내부에서 세팅하기
Swift 클로져의 경우는 별 상관 없는데 Objective-C 블럭의 경우 외부 변수에 뭔가를 쓰는 것은 기본적으로 금지되어 있다. (즉 읽기만 가능하다.) 이를 쓰기 가능하게 풀려면 '__block' 을 쓰려는 변수 선언 앞에 달아주면 된다. 아래 코드는 GCD Dispatch 에서 사용하는 예이다.
__block int result = 0;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
  ....
  result = [some workAndResult];
});

 

2020/05/29 - [iOS/Objective-C] - Detect permission of camera in iOS

2020/05/29 - [iOS/Swift] - WKWebView에서 history back 처리

2020/05/29 - [iOS/Objective-C] - OpenGL ES View Snapshot

2020/05/29 - [iOS/Objective-C] - Merge two different images in swift

2020/05/29 - [프로그래밍/C, C++] - Base64 encode / decode in C++

2020/05/29 - [OS/Mac OS X] - iPhone SDK location on hard drive

2020/05/29 - [iOS/Objective-C] - NSString <-> CBUUID 변환

2020/05/29 - [개발노트] - HTTP Content-Type

2020/05/28 - [iOS/Swift] - SEED 블록암호 알고리즘 CBC (Cipher Block Chaining) 예제

2020/05/28 - [개발노트] - HMAC SHA256

2020/05/26 - [iOS/Swift] - Array <-> Data 변환

2020/05/25 - [분류 전체보기] - UserAgent 추가

2020/05/25 - [iOS/Swift] - RSA 암호화 / 복호화

2020/05/25 - [iOS/Swift] - Base64 인코딩/디코딩

2020/05/19 - [AI/Algorithm] - Generic algorithm

 

반응형

'개발 > iOS' 카테고리의 다른 글

네비게이션바 투명 처리  (0) 2020.05.29
클로저(Closure)  (0) 2020.05.29
Detect permission of camera in iOS  (0) 2020.05.29
WKWebView에서 history back 처리  (0) 2020.05.29
OpenGL ES View Snapshot  (0) 2020.05.29
블로그 이미지

SKY STORY

,