【发布时间】:2020-05-02 17:30:58
【问题描述】:
AppStore 现在要求其 6.5 英寸元数据图像使用 iPhone 11(或高 iPhone X)皮肤。请有人指出我的方向,以便在我的 Codenameone 模拟器中使用。
我正在安装最新版本 (CN1 v6),在我的 .codenameone 文件夹中最多有 IPhoneX.skin,但我想尽可能多地证明未来,所以选择 11。谢谢
【问题讨论】:
标签: codenameone
AppStore 现在要求其 6.5 英寸元数据图像使用 iPhone 11(或高 iPhone X)皮肤。请有人指出我的方向,以便在我的 Codenameone 模拟器中使用。
我正在安装最新版本 (CN1 v6),在我的 .codenameone 文件夹中最多有 IPhoneX.skin,但我想尽可能多地证明未来,所以选择 11。谢谢
【问题讨论】:
标签: codenameone
尽管您可以在here 上提交 RFE,但我们还没有 iPhone 11 皮肤。但这对大多数人来说并不重要。
大多数人使用这些工具以便携的方式生成屏幕截图:
【讨论】:
我遇到了同样的问题。我使用不同的方法来获取一个或多个屏幕截图根据商店的要求。简而言之,我在“Browser Stack App Live”(具有多个真实设备,例如所需的 iPhone 11)上执行应用程序,使用以编程方式向我发送应用程序的一个或多个屏幕截图的代码,使用一个 REST 请求。
请注意,在 Browser Stack App Live 上无法发送电子邮件,这就是我创建自己的 REST API 来上传屏幕截图的原因。
很简单,我在分享之前测试了以下解决方案。在安装了 Apache + PHP 的临时 VPS 上,或者在您的本地计算机上(如果您有公共 IP)上,创建以下 upload.php,记住使用您的实际 url 更新 $server_url:
<?php
header('Content-Type: application/json; charset=utf-8');
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: PUT, GET, POST");
$response = array();
$upload_dir = 'uploads/';
$server_url = 'https://www.example.com/mydir/';
if($_FILES['screenshot'])
{
$screenshot_name = $_FILES["screenshot"]["name"];
$screenshot_tmp_name = $_FILES["screenshot"]["tmp_name"];
$error = $_FILES["screenshot"]["error"];
if($error > 0){
$response = array(
"status" => "error",
"error" => true,
"message" => "Error uploading the file!"
);
}else
{
$random_name = rand(1000,1000000)."-".$screenshot_name;
$upload_name = $upload_dir.strtolower($random_name);
$upload_name = preg_replace('/\s+/', '-', $upload_name);
if(move_uploaded_file($screenshot_tmp_name , $upload_name)) {
$response = array(
"status" => "success",
"error" => false,
"message" => "File uploaded successfully",
"url" => $server_url."/".$upload_name
);
}else
{
$response = array(
"status" => "error",
"error" => true,
"message" => "Error uploading the file!"
);
}
}
}else{
$response = array(
"status" => "error",
"error" => true,
"message" => "No file was sent!"
);
}
echo json_encode($response);
?>
之后,mkdir uploads 和 chown 相应地获得 php 文件和上传目录的权限。
服务器已准备就绪。
在您的应用上,添加以下方法(记得更改String url 的值):
public static void sendMeScreenshot() {
Form form = Display.getInstance().getCurrent();
if (form != null) {
try {
Image screenshot = Image.createImage(form.getWidth(), form.getHeight());
form.paintComponent(screenshot.getGraphics(), true);
String file = FileSystemStorage.getInstance().getAppHomePath() + "/screenshot_" + System.currentTimeMillis() + ".png";
OutputStream output = FileSystemStorage.getInstance().openOutputStream(file);
ImageIO.getImageIO().save(screenshot, output, ImageIO.FORMAT_PNG, 1.0f);
String url = "https://www.example.com/mydir/upload.php";
MultipartRequest request = new MultipartRequest();
request.setUrl(url);
request.addData("screenshot", file, "multipart/form-data");
NetworkManager.getInstance().addToQueue(request);
} catch (IOException ex) {
Log.e(ex);
}
}
}
最后,使用UITimer.timer(5000, false, hi, () -> sendMeScreenshot()); 之类的代码在所需时间后获取您感兴趣的表单的屏幕截图。
在模拟器中测试,它应该可以工作。添加一些日志记录并在网络监视器中检查返回的 JSON。如果一切正常,请使用 Browser Stack App Live 打开您的应用,选择所需的设备(在本例中为 iPhone 11)。您将在您的 VPS 的所选upload 目录中找到屏幕截图(或多个屏幕截图)。您可以使用scp 下载或直接在浏览器中打开。
如果您没有所需的设备,此解决方案很有用,但请记住不要让您的 upload.php 在线,以免出现安全问题。
【讨论】: