Xamarin.IOS/Mac开发中遇到的问题
虚拟机中安装的mac系统无法识别iphone
今天在 Xamarin.iOS 应用的免费预配 时,进行到 5、插入要在其中部署应用的 iOS 设备。 在第8选择iphone设备时,发现iphone并没有连接上mac虚拟机。
于是在其他mac上尝试连接了是可以的,然后怀疑是自己mac哪里的设置问题。
1、首先看下相关的服务有没有开启
鼠标右键“计算机”->“管理”-“服务和应用程序”->“服务”,找到“VMware USB Arbitration Service”,开启服务。(可以设置为自动启动,以免以后每次开机都要手动开启)
开启后,PC要重启才能生效。
2、看下虚拟机的设置是否正确
要对虚拟机设置:usb控制器,将usb兼容从USB3.0 调到USB2.0。点击确定。
(注意:更改设置时系统应该是关机状态,否则更改无效)
这是因为你的设备USB接口可能是2.0的
然后重启,重连ok。
苹果手机应用显示不受信任的开发者时,要怎么办
ios部署失败:
error MT1007: Failed to launch the application '/Users/huymac/Library/Caches/Xamarin/mtbs/builds/FromPractice.iOS/d3c1b1491d287d04e44e10dc7e8e7f9b/bin/iPhone/Debug/FromPractice.iOS.app' on the device '????????? iPhone':
Failed to launch the application 'huy.com.FormPractice' on the device '????????? iPhone': Application failed to launch: ESecurity. You can still launch the application manually by tapping on it.
这种情况一般是 开发者不受信任导致。
解决:手机-》设置-》通用-》设备管理-》
查看安装的Xamarin.iOS版本
编译时报错:Xamarin.iOS 12.14.0 does not support a deployment target of 12.4 for iOS (the maximum is 12.2). Please select an older deployment target in your project's Info.plist or upgrade to a newer version of Xamarin.iOS. AwesomeApp.iOS
安装的版本 相对于需要运行的iphone手机的版本太低了。
解决方法:在 Info.plist 中修改 部署目标,为12.2
Xcode中的iOS模拟器(iOS Simulator)
安装了最新版的Xcode10.3,后来发现只有ios 12.4版本的模拟器,而在win10上vs开发装的是Xamarin.ios12.14,最大支持12.2版本的,无法调试,于是想办法在mac上安装低版本的ios模拟器。
打开XCode->Preferences->Components
如何修改mac虚拟机硬盘大小
Mac上用户->xxx目录下没有“资源库”目录
对huymac邮件,选择查看显示选项,勾选“”资源库”文件夹
win10系统VMware Workstation与Device/Credential Guard不兼容
解决VM 与 Device/Credential Guard 不兼容。在禁用 Device/Credential Guard 后,可以运行 VM 的方法
或者
步骤都设置好后,重新启动计算机。
查看Mac上安装的mono版本
启动VS for Mac,打开上面工具栏,工具-》自定义工具。
【也可以在文件夹下去看:访达->前往->电脑->xxMac->资源库->Framework】
在win10上用vs开发ios时,需要和mac配对,检测到mono版本不符合时:
mac上安装的mono版本可能与此版本的visual studio不兼容
可以在mac上 再去下载和安装一个新版本的mono,而不要替换,https://www.mono-project.com/download/stable/#download-mac。
建议:不要随意去更新vs的版本。。
此外,Xamarin.ios版本和Xcode也会不兼容:
Mac上后安装Android
Mac上初始安装VS for Mac时没有安装Android,后来想安装了怎么解?
在VS for Mac工具中找了半天没有发现入口,后来试了下 VS for Mac安装文件,ok。
开发:UIKit Consistency error: you are calling a UIKit method that can only be invoked from the UI thread
UIKit一致性错误:您正在调用只能从UI线程调用的UIKit方法
应该是需要在主线程(UI线程)上操作的代码,被你放在后台线程上执行了。
一般是跟界面相关的。或者绑定界面的可绑定属性等,断点执行下看是那些代码。
未能停止应用: An error occurred on client IDB1630274 while executing a reply for topic xvs/idb/16.3.0.274/stop-app
问题:app打开时,按Home键退出,然后再点app进入,本应该直接回到app的,可是出现app需要重新登录的现象。调试发现按Home时,输出里显示如标题的错误,网上根本没有解决方法。
排查推测可能是退出时需要执行的什么操作报错,由于时团队项目,问同事是否退出时是否有什么操作,他才想起来原来是他某个文件没有提交(涉及到退出的操作)。
提交文件,重新调试,ok!
AMDeviceSecureInstallApplicationBundle returned: 0xe8008021.
部署应用到app的时候报错
方法:将设备中的app删除,然后重新运行
调试时文件未找到,或者冲突
尝试删除项目中的'Resources/LaunchScreen.storyboard' 但是没有起作用。
解决方法:直接找到csproj项目文件去编辑(删除对应的文件)
app顶部显示框位置问题
问题:IPhone X刘海屏手机 顶部自定义显示框时,不能用硬编码的高度,而应该获取系统状态栏高度
在刘海屏手机出来之前,iOS App的顶部状态栏高度为20pt,导航栏的可布局区域高度为44pt,整个导航栏高度为64pt,底部安全距离为0。
在刘海屏手机出来后,刘海屏机型iOS App的顶部状态栏高度为44pt,导航栏的可布局区域高度为44pt,整个导航栏高度为88pt,底部安全距离为34pt。
xamarin.ios中:App.StatusBarHeight = UIApplication.SharedApplication.StatusBarFrame.Height; //注意 这一句要放对位置,调试出来不为0才行
参考:iOS灵活适配刘海屏手机的顶部状态栏高度和底部安全距离
iOS13 后UISearchBar的TextField的背景颜色
UISearchBar searchBar = Control as UISearchBar; if (searchBar != null) { searchBar.BackgroundColor = UIColor.White; //整个的颜色 if (UIDevice.CurrentDevice.CheckSystemVersion(13, 0)) { //iOS13开始,可以通过这个属性去获取UISearchBar的TextField UISearchTextField uISearch = searchBar.SearchTextField; if (uISearch != null) { uISearch.BackgroundColor = UIColor.White; } } }
参考:iOS13 获取UISearchBar的TextField