我们的应用程序使用 CoreNFC 来扫描 NFC 标签,如果不支持 NFC,您可以使用 QR。这工作得很好,我们能够在模拟器中运行该应用程序以进行 (ui) 测试。
直到 Xcode12 / iOS14 GM 构建。在 iOS13(或更低版本)中,我们在模拟器上运行它不会有任何问题。
但是在 iOS14 模拟器 iPhone11 上运行它的 Xcode12 中,我们会得到以下结果:
dyld: launch, loading dependent libraries
DYLD_SHARED_CACHE_DIR=/Users/xxx/Library/Developer/CoreSimulator/Caches/dyld/19G73/com.apple.CoreSimulator.SimRuntime.iOS-14-0.18A372
DYLD_ROOT_PATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot
DYLD_LIBRARY_PATH=/Users/xxx/Library/Developer/Xcode/DerivedData/xxx-awnlestrbvesqqbynrhmluzhbcsc/Build/Products/Debug-iphonesimulator:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/system/introspection
DYLD_INSERT_LIBRARIES=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/libBacktraceRecording.dylib:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSi
dyld: Library not loaded: /usr/lib/libnfshared.dylib
Referenced from: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/CoreNFC.framework/CoreNFC
Reason: no suitable image found. Did find:
/usr/lib/libnfshared.dylib: mach-o, but not built for platform iOS-sim
Run Code Online (Sandbox Code Playgroud)
模拟器崩溃对我来说很有意义,因为模拟器无法扫描 NFC 标签,但这就是我所做的:
#if canImport(CoreNFC)
周围import CoreNFC …
我刚刚在iPhone 7上安装了第一个iOS 11测试版,我对尝试NFC感兴趣.在设置中没有任何关于它.我想知道是否有任何示例代码显示如何读取标记.任何人都可以在代码片段中展示如何使用Core NFC SDK吗?
如何检测iPhone是否能够使用核心NFC框架提供的NFC芯片?
我现在知道它只适用于iPhone 7和7 plus但我不想硬编码硬件字符串标识符,因为我不知道将来会出现什么设备.
我正在做一个将NFCTagReader实现到xamarin.ios应用程序的POC.
https://developer.xamarin.com/samples/monotouch/ios11/NFCTagReader/
我从xamarin网站上获取了NFCTagReader并设置了所有相应的配置设置以访问标签阅读器.问题是,当我点击扫描时,按预期弹出"准备扫描"窗口,然后我扫描一个标签,它在屏幕上显示小刻度,表明它已找到,但它从未打破我的代码的DidDetect方法代表.它将命中DidInvalidate方法并为ReaderSessionInvalidationErrorUserCanceled提供代码.
我想念的任何想法.以下是我的代码段:
partial void Scan(UIBarButtonItem sender)
{
InvokeOnMainThread(() =>
{
Session = new NFCNdefReaderSession(this, null, true);
if (Session != null)
{
Session.BeginSession();
}
});
}
#endregion
#region NFCNDEFReaderSessionDelegate
public void DidDetect(NFCNdefReaderSession session, NFCNdefMessage[] messages)
{
foreach (NFCNdefMessage msg in messages)
{
DetectedMessages.Add(msg);
}
DispatchQueue.MainQueue.DispatchAsync(() =>
{
this.TableView.ReloadData();
});
}
public void DidInvalidate(NFCNdefReaderSession session, NSError error)
{
var readerError = (NFCReaderError)(long)error.Code;
if (readerError != NFCReaderError.ReaderSessionInvalidationErrorFirstNDEFTagRead &&
readerError != NFCReaderError.ReaderSessionInvalidationErrorUserCanceled)
{
InvokeOnMainThread(() =>
{
var alertController = UIAlertController.Create("Session Invalidated", error.LocalizedDescription, …
Run Code Online (Sandbox Code Playgroud) 我在使用 ios 13+ 和 swift 5 从 rfid 芯片读取数据时遇到一个非常基本的问题,我有两个设置(NFCNDEFReaderSession 和 NFCTagReaderSession),
\n\nNFCNDEF阅读器会话:
\n\nimport UIKit\nimport CoreNFC\n\nclass ViewController: UIViewController {\n\n var session: NFCNDEFReaderSession?\n\n override func viewDidLoad() {\n super.viewDidLoad()\n\n session = NFCNDEFReaderSession(delegate: self, queue: DispatchQueue.main, invalidateAfterFirstRead: false)\n session?.begin()\n }\n\n}\n\nextension ViewController: NFCNDEFReaderSessionDelegate {\n\n func readerSessionDidBecomeActive(_ session: NFCNDEFReaderSession) {\n print("active") // called once\n }\n\n func readerSession(_ session: NFCNDEFReaderSession, didDetectNDEFs messages: [NFCNDEFMessage]) {\n print("didDetectNDEFs") // never called\n }\n\n func readerSession(_ session: NFCNDEFReaderSession, didInvalidateWithError error: Error) {\n print(error.localizedDescription) // only called on timeout\n }\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n … 当您成功完成NFC
阅读课程后,您会看到类似的内容:
这将覆盖当前呈现ViewController
的约3秒.有趣的是,这种行为是不一致的,因为如果阅读会话结束得非常快,这个窗口会立即消失.
这意味着我无法确定这个叠加层能保持多长时间,这对我们的应用程序的UX设计有害.
问题很简单:有没有办法强制这个叠加层消失或至少处理它何时消失的事件(不是当NFC
会话结束时)?
我正在研究iOS 13的新CoreNFC功能,并且正在努力使NFCTagReaderSession工作。设置权利并实例化NFCTagReaderSession和委托之后,我尝试通过调用来启动会话nfcTagReaderSession?.begin()
。我的会话立即因以下错误而失效:
Error Domain=NFCError Code=2 "Missing required entitlement" UserInfo={NSLocalizedDescription=Missing required entitlement}
我在这里查看了我的权利文件的文档:https : //developer.apple.com/documentation/bundleresources/entitlements/com_apple_developer_nfc_readersession_formats
我还在Info.plist中添加了相应的“隐私-NFC扫描使用说明”。
有人让这个工作了吗?这仅仅是Xcode 11或iOS 13的问题吗?
这是我的ViewController中的代码:
import UIKit
import CoreNFC
class ViewController: UIViewController {
var nfcTagReaderSession: NFCTagReaderSession?
override func viewDidLoad() {
super.viewDidLoad()
nfcTagReaderSession = NFCTagReaderSession(pollingOption: [.iso14443, .iso15693, .iso18092], delegate: self)
nfcTagReaderSession?.begin()
print("isReady: \(nfcTagReaderSession?.isReady)")
}
}
extension ViewController: NFCTagReaderSessionDelegate {
func tagReaderSessionDidBecomeActive(_ session: NFCTagReaderSession) {
print("Tag reader did become active")
}
func tagReaderSession(_ session: NFCTagReaderSession, didInvalidateWithError error: Error) {
print("\(error)")
}
func tagReaderSession(_ session: NFCTagReaderSession, …
Run Code Online (Sandbox Code Playgroud) 我CoreNFC sample
在Xcode 9.0 beta 2中运行代码时遇到此错误并且应用程序崩溃
dyld: Library not loaded: @rpath/CoreNFC.framework/CoreNFC
Referenced from: /var/containers/Bundle/Application/2837709C-C852-4811-B696-38F2725554D4/iOS-11-by-Examples.app/iOS-11-by-Examples
Reason: image not found
Run Code Online (Sandbox Code Playgroud)
有谁知道如何解决这个问题?
Core NFC可以在iPad上运行吗?
总而言之,iPad确实有NFC芯片,但Core NFC文档并没有说它支持它.
注意
iPhone 7和iPhone 7 Plus支持读取NFC NDEF标签.
在模拟器上运行此iOS11-NFC示例将始终Feature not supported
在所有设备上运行.
我正在使用 Flutter 开发一个 Android+iOS 应用程序,它有几个用户交互屏幕和 NFC 屏幕。
在 NFC 屏幕上,用户连续点击手机(就像我们处理 Android 波束数据传输一样):一部手机是 Android 手机,它运行应用程序并发送 NFC NDEF 消息,就像本例中一样。
在第二部手机上,带有 NFC 屏幕的“我的应用程序”正在运行,并使用nfc_in_flutter(flutter 中只有 3 个 nfc 插件,这是当前似乎唯一维护的插件)读取 NDEF 并显示在屏幕上。
这种情况在 Android 设备上运行良好,但是在 iOS 设备上,当我点击 Android 设备时,什么也没有发生。它不读。
我使用 iOS 设备测试了简单的 NFC 标签(不是 Android 设备),它读取了标签。有人可以解释一下原因是什么吗?
以下是我的假设,如果我错了,请纠正我:由于iOS仅支持NDEF格式而不支持HCE,所以我应该将NDEF从Android发送到iOS。
我对主机卡模拟的了解:
为了使设备像卡一样工作(或使用 HCE),应用程序需要创建 HostApduService。当此服务运行时,手机(以及应用程序本身)能够识别阅读器,如果一切正常,它会发送有效负载。消息的格式是 IsoDep(不是 NDEF)。
另一方面,阅读器端发送 ADPU 来建立连接,如果正常,则接收有效负载。
在上面的示例中,发送方创建 NDEF 消息,并且不充当卡 (HCE),因为没有创建 HostApduService。
那么,如果 iOS 支持 NDEF 消息,为什么 iOS 设备不读取 Android 设备上的消息呢?