如何在 iPhone 模拟器中测试相机?

问题描述 投票:0回答:6

有没有什么方法可以在模拟器中测试 iPhone 摄像头,而无需在设备上部署?这看起来非常乏味。

iphone ios-simulator
6个回答
155
投票

您必须在设备上测试许多特定于设备的功能,但这并不比使用模拟器难。只需为设备构建一个调试目标并将其连接到计算机即可。

需要实际设备的操作列表:

  • 实际手机
  • 相机
  • 加速度计
  • 真实GPS数据
  • 指南针
  • 振动
  • 推送通知...

10
投票

我需要测试一些自定义的照片叠加层。 需要根据图像的大小/分辨率调整叠加。

我的处理方式与 Stefan 的建议类似,我决定编写一个“虚拟”相机响应。

当模拟器运行时,我执行此虚拟代码而不是标准的“captureStillImageAsynchronouslyFromConnection”。

在此虚拟代码中,我构建了一张具有必要分辨率的“黑色照片”,然后将其通过管道发送以像普通照片一样处理。 本质上提供了非常快的相机的感觉。

CGSize sz = UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation]) ? CGSizeMake(2448, 3264) : CGSizeMake(3264, 2448);
UIGraphicsBeginImageContextWithOptions(sz, YES, 1);
[[UIColor blackColor] setFill];
UIRectFill(CGRectMake(0, 0, sz.width, sz.height));
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

NSData *imageData = UIImageJPEGRepresentation(image, 1.0);

上图相当于当今大多数设备发出的 8MP 照片。 显然,要测试其他分辨率,您需要更改大小。


3
投票

对于 macOS 13+(可能是 macOS 12)和 Xcode 14+,另一种方法是通过“My Mac(专为 iPhone 设计)”Xcode 目标运行 iPhone 应用程序。

My Mac (Designed for iPhone)

“捕获并保存照片” Swift Playground 提供了使用实时 macOS 相机的 iOS 示例代码。

注意:arm64 Mac 可以直接运行“My Mac (Designed for iPhone)”。但是,x86_64 需要使用“Mac (Mac Catalyst)”通过基于 iOS 的 API 调用来使用实时摄像头。


2
投票
不(除非他们在 3.2 中添加了一种方法,尚未检查)。


0
投票
我编写了一个在调试模式下使用的替换视图。它实现相同的 API 并进行相同的委托回调。就我而言,我让它从我的测试集中返回随机图像。写起来很简单。


0
投票
需要访问相机的一个常见原因是为AppStore截屏。

由于相机在模拟器中不可用,一个好技巧(我知道的唯一一个)就是将视图大小调整为您需要的大小,只是拍摄屏幕截图的时间。您稍后将裁剪它们。

当然,您需要有更大屏幕的设备。

iPad 非常适合测试布局并为所有设备制作快照。 iPhone6+ 的屏幕截图必须稍微拉伸(缩放 1,078125 - 没什么大不了的......)

iOS 设备分辨率快速参考的良好链接:http://www.iosres.com/


编辑:在最近的一个使用自定义相机视图控制器的项目中,我已将 AVPreview 替换为仅用于在模拟器中运行的目标中的 UIImageView。这样我就可以自动上传 iTunesConnect 的屏幕截图。请注意,相机控制按钮不在叠加层中,而是在相机预览视图中。

下面的@Craig 答案描述了另一种我认为非常聪明的方法 - 它也适用于相机覆盖,与我的相反。

© www.soinside.com 2019 - 2024. All rights reserved.