交付到 App Store 时,Fastlane 框架不支持的屏幕尺寸

Posted

技术标签:

【中文标题】交付到 App Store 时,Fastlane 框架不支持的屏幕尺寸【英文标题】:Fastlane frameit unsupported screen size when deliver to App store 【发布时间】:2019-04-09 11:51:52 【问题描述】:

使用 Swift5、ios-12.2、Xcode-10.2(10E125) 并使用 GitLab CI 运行一切,

在应用发布步骤中,屏幕截图屏幕尺寸似乎存在问题(使用 Fastlane 的 deliver)。屏幕截图制作精美(使用 Fastlane 的 snapshotframeit 工具)。

但是现在更新到最新的 iOS、Swift 和 Xcode 版本突然打破了我的 Fastlane 工作示例。我现在收到以下错误:

Unsupported screen size [1446, 2948] for path '/Users/user/Documents/Programieren/iPhone_applications/Learning/Watch/MyApp/builds/aMDc3etB/0/myusername/MyAppName/fastlane/screenshots/de-DE/iPhone 8 Plus-01Screenshot_de_framed.png'

Fastlane 会不会有什么问题:

frameit 步骤中(因为带框的图像比snapshot 创建的尺寸更大) 或在应用发布步骤(因为 Apple 可能会更改某些内容以接受屏幕尺寸)。

我想知道我用 GitLab CI 运行所有东西的事实是否会产生影响(但它不应该)。 deliver 步骤的屏幕截图大小导致 Fastlane 失败的原因可能是什么?

对于一个 iPhone8-Plus 的例子 - 我意识到:

--> Fastlane snapshot 步骤后的屏幕截图大小为 [1242 × 2208] 像素

--> Fastlane frameit 步骤后的框架屏幕截图大小为 [1446 × 2948] 像素

Apple 应用商店要求提供 [1242 × 2208] 像素大小的图像 - 因此永远不会接受“带框”的图像!!

frameit 会不会有什么问题???

我应该在我的 Snapfile 中选择不同的 iOS 设备(见下文)吗?如果是的话,哪些??? (也就是说,过去 App Store 需要 iPhone8 Plus 大小的屏幕截图 [5.5"]。这可能会改变吗??)

这是我的快速文件:

lane :screenshots do
    snapshot
    frameit(silver: true, path: './fastlane/screenshots')
end

这是我的快照文件:

workspace "MyApp.xcworkspace"
scheme "MyAppUITests"
devices([
    "iPhone 8 Plus",
    "iPhone SE"
])
languages([
    "en-US",
    "de-DE"
])
localize_simulator true
clear_previous_screenshots true
erase_simulator true
reinstall_app true

这是我的 Framefile.json 文件:


    "device_frame_version": "latest",
    "default": 
        "keyword": 
            "fonts": [
                
                    "font": "./fonts/SF-UI-Display-Semibold.otf",
                    "supported": ["de-DE", "en-US"]
                ,
                
                    "font": "./fonts/Chinese.ttf",
                    "supported": ["zcmn-Hans"]
                
            ]
        ,
        "title": 
            "fonts": [
                
                    "font": "./fonts/SF-UI-Display-Regular.otf",
                    "supported": ["de-DE", "en-US"]
                ,
                
                    "font": "./fonts/Chinese.ttf",
                    "supported": ["zcmn-Hans"]
                
            ],
            "color": "#203943"
        ,
        "background": "./background.jpg",
        "padding": 50,
        "stack_title" : false,
        "title_below_image": false,
        "show_complete_frame": false,
    ,


    "data": [
        
            "filter": "01",
            "keyword": 
                "color": "#4B849B"
            
        ,
        
            "filter": "02",
            "keyword": 
                "color": "#4B849B"
            
        ,
        
            "filter": "03",
            "keyword": 
                "color": "#4B849B"
            
        ,
        
            "filter": "04",
            "keyword": 
                "color": "#4B849B"
            
        ,
        
            "filter": "05",
            "keyword": 
                "color": "#4B849B"
            
        ,
        
            "filter": "06",
            "keyword": 
                "color": "#4B849B"
            
        
    ]

【问题讨论】:

我刚刚发现了这个:Starting March 27, 2019, all app submissions for iPhone or iPad, including universal apps, will require screenshots for iPhone XS Max or the 12.9-inch iPad Pro (3rd generation).我猜,除了我目前使用的 8 Plus 之外,我还必须使用 XS Max.... 嗯,不!将iPhone Xs Max 添加到Snapfiledevices 并没有帮助,因为frameit 会生成大小为[1413 × 2844] 的Xs-Max 屏幕截图,但App Store 只允许[1242 × 2688]。因此还是同样的问题。任何人都可以为此提供解决方案吗? frameit 如果您添加设备框架(它在屏幕截图周围添加一个框架以保持其大小),则应该生成不同大小的图像,但创建一个如果您将带框的屏幕截图放在背景上,则原始大小的图像,例如填充和文本。根据您的描述,目前尚不清楚发生了什么。 (1) snapshotcapture_ios_screenshotscapture_screenshots 是相同代码的别名。 (2) 如果它以前有效,您可以比较框架屏幕截图的大小 - 那里有什么变化吗? (3) 是的,更改配置当然会改变一些事情 - 回到您的旧配置,看看它是否适用于当前版本。 谢谢 janpio。哦不 - 愚蠢的我!我发现了错误:我的.gitignore 文件包含fastlane/screenshots,这阻止了我所有的Framefile.json 更改生效!而且由于我正在使用 GitLab CI,我所有的 git push 都没有提供我的任何 fastlane 配置更改(但仍然触发了一个新管道 - 不幸的是,所有这些都是旧配置)。你对问题的整理帮助了我,让我看得更深入,我感谢你! 【参考方案1】:

对于那些遇到frameit 吐出“不支持的屏幕尺寸”错误的人,这里有一个解决问题的脚本方法。

    转到this file 以检查所有设备接受的屏幕尺寸。

    使用magick 将原始屏幕截图重新设置为所需设备所需的尺寸。调整屏幕截图大小以适应 iPhone 12 Pro Max 的示例命令如下所示

magick $file -resize "1284x2778"\! $file
    调整大小后,运行frameit

【讨论】:

以上是关于交付到 App Store 时,Fastlane 框架不支持的屏幕尺寸的主要内容,如果未能解决你的问题,请参考以下文章

即使使用 API 密钥,Fastlane 上传到 App Store 也会在非交互模式下失败

App Store Connect API/fastlane:审核开始后如何“开发者拒绝”提交

VSTS Task Apple App Store 要求提供 2FA 代码,但设置了 Fastlane Session 和 App-Specific

Realm.js 和 Fastlane 集成

如何使用 fastlane 扫描设置 COMPILER_INDEX_STORE_ENABLE=NO?

App Store Connect 给我“无效的预发布火车”