iOS 11을 사용하는 CoreNFC

4598 단어 NFCSwiftWWDCios11iOS
WWDC가 2017년에 발표한 코어NFC를 사용해 보았다.테스트 범위 내에서 NDEF(NFC Data Exchange Formet)를 읽을 수 있습니다.FelicaID를 읽을 수 없습니다.
  • CoreNFC
  • 작업 환경

  • XCode Version 9.0 beta (9M136h)
  • iOS11(Build 15A5278f)
  • 샘플 코드


    제작 과정이지만 실행되는 샘플 코드를 아래에 놓습니다.
    https://github.com/bellx2/ios11NFCTest/
    ※ provisioning 파일을 설치해야 합니다.

    설정 방법


    CoreNFC를 사용하려면 다음과 같은 설정이 필요합니다.정식 버전이라면 다른 기능 확장과 마찬가지로 XCode의 Capabilities를 통해 설정하기만 하면 1.2가 필요 없다.
    1. ADC 사이트에서 Provisioning 파일의 NFC Reading을 활성화합니다.

    이 provosioning 파일을 사용합니다.
    2. entitlements 파일에서 NFC 설정
    <key>com.apple.developer.nfc.readersession.formats</key>
        <array>
            <string>NDEF</string>
        </array>
    
    entitlements 파일이 생성되지 않은 경우 Capabirities에서 "Siri"등을 선택하면 생성됩니다.
    3.Info.plist에 NFFCReaderUsageDescription 추가 (대화상자에 표시)
    <key>NFCReaderUsageDescription</key>
        <string>NFCのカードをかざしてください</string>
    
    4. 프로젝트에 CoreNFC 추가

    프로그램 설명


    N F C NDEFReader Session Delegate를 설정합니다.
    class ViewController: UIViewController, NFCNDEFReaderSessionDelegate{
        ....
    }
    
    NFC DEFReader Session을 생성합니다.invalidate AfterFirstRead를 가짜로 설정하면 NFC를 여러 번 읽습니다.만약 사실이라면 스캔을 한 번 하면 끝난다.
    let session:NFCNDEFReaderSession = NFCNDEFReaderSession(delegate: self, queue: nil, invalidateAfterFirstRead: true)
    session.begin()
    
    begin () 시 대화상자가 나타나 읽기 모드로 들어갑니다.
    값을 얻을 수 있다면, 데이터는readerSession (,didDetectNDEFs) 에서 되돌아옵니다.
    func readerSession(_ session: NFCNDEFReaderSession, didDetectNDEFs messages: [NFCNDEFMessage]) {
            for message in messages{
                for payload in message.records {
                    print ("Payload Data: \(payload.payload)")
                }
            }
    }
    
    오류나 종료를 readerSession(didInvalidateWithError)이라고 합니다.
    func readerSession(_ session: NFCNDEFReaderSession, didInvalidateWithError error: Error) {
            print("Error: \(error.localizedDescription)")
        }
    }
    

    주의점

  • 실제 또는 GenericDevice를 선택하지 않으면 "No Such module"CoreNFC"로 컴파일할 수 없습니다.자동 충전 등도 소용없다.
  • provisioning을 설정하지 않으면 다음 오류가 발생합니다.
  • entitlements 파일을 설정하지 않은 상태에서 202 오류가 발생했습니다. Info.plist에 NFFC Reader Usage Description 신청서가 없으면 곧 탈락...
  • 기타 참조

  • StackOverflow
    https://stackoverflow.com/questions/44380305/ios-11-core-nfc-any-sample-code
  • NDEF
    http://nfcpy.readthedocs.io/en/latest/topics/ndef.html
  • 좋은 웹페이지 즐겨찾기