Mac OS -- ORSSerialPort打開serialPort時提示錯誤Operation not permitted

導入ORSSerialPort, 實現其delegate方法, 並設置代理

-(void)serialPort:(ORSSerialPort *)serialPort didEncounterError:(NSError *)error{
    NSLog(@"error:%@",error);
}

在操作 [serialPort open] 時, 系統報出來一下錯誤, 導致打開serial port 失敗

Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted" UserInfo={NSFilePath=/dev/cu.usbserial-Fixture1, NSLocalizedDescription=Operation not permitted}

原因及解決辦法:

1. 權限問題, 
原因: 電腦啓用了SIP(System Integrity Protection),增加了rootless機制

在terminal中輸入csrutil status, 檢查SIP狀態, 當顯示enabled時, 表示需要修改權限

$ csrutil status
System Integrity Protection status: enabled.

解決辦法: 

a). 重啓電腦,屏幕暗下後立馬按住 command+R,進入保護模式, 開啓terminal執行csrutil disable

b). reboot重啓電腦

c). 啓動電腦後, 在terminal中輸入csrutil status, 檢查狀態, 顯示如下狀態表示修改成功.

$ csrutil status
System Integrity Protection status: disabled.

d). 如果想要再次啓動SIP, 只需再次進入保護模式後, 終端中執行csrutil enable, 其它過程相同

 

2. app軟件權限賦予問題

原因: 未賦予串口硬件訪問權限

解決辦法:

項目名稱.entitlements 文件手動加上如下鍵值對

key: com.apple.security.device.serial  == type:Boolean == value: YES

如下圖所示:

 

經驗證, 第二種方法有效. 


更多的Entitlement key權限設置, 可查閱官方文檔Entitlement Key Reference

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章