繁体   English   中英

Cordova ios 错误构建 Images.xcassets

[英]Cordova ios error building Images.xcassets

我花了很多时间试图解决这个问题,但无济于事。

我更新了cordova,自从el capan 我的mac 现在有NPM 和cordova 的问题。

我安装了它,但我现在必须对cordova 使用sudo。

尝试了以下方法:

sudo cordova platform remove ios
sudo cordova platform add ios
sudo cordova build ios

这给了我以下输出:

** BUILD FAILED **


The following build commands failed:
    CompileAssetCatalog build/emulator/<AppName>.app <AppName>/Images.xcassets
(1 failure)
ERROR building one of the platforms: Error code 65 for command: xcodebuild with args: -xcconfig,/Users/MacUserName/Desktop/<AppName>/<AppName>/platforms/ios/cordova/build-debug.xcconfig,-project,<AppName>.xcodeproj,ARCHS=i386,-target,<AppName>,-configuration,Debug,-sdk,iphonesimulator,build,VALID_ARCHS=i386,CONFIGURATION_BUILD_DIR=/Users/MacUserName/Desktop/<AppName>/<AppName>/platforms/ios/build/emulator,SHARED_PRECOMPS_DIR=/Users/MacUserName/Desktop/<AppName>/<AppName>/platforms/ios/build/sharedpch
You may not have the required environment or OS to build this project
Error: Error code 65 for command: xcodebuild with args: -xcconfig,/Users/MacUserName/Desktop/<AppName>/<AppName>/platforms/ios/cordova/build-debug.xcconfig,-project,<AppName>.xcodeproj,ARCHS=i386,-target,<AppName>,-configuration,Debug,-sdk,iphonesimulator,build,VALID_ARCHS=i386,CONFIGURATION_BUILD_DIR=/Users/MacUserName/Desktop/<AppName>/<AppName>/platforms/ios/build/emulator,SHARED_PRECOMPS_DIR=/Users/MacUserName/Desktop/<AppName>/<AppName>/platforms/ios/build/sharedpch

科尔多瓦版本

sudo cordova -v
6.0.0

更新:我现在运行的是 6.1.1,还是同样的问题

Cordova iOS平台版本

sudo cordova platform ios -v
6.1.1

Mac 版本:10.11.3
XCode 版本:7.2.1

我设法通过以下方式解决了这个问题:

  • 删除config.xml文件中的任何图标或启动画面引用;
  • splash.png和/或icon.png文件放在cordova 项目的www/resources文件夹中; 那么,
  • 运行ionic cordova resources --iconionic cordova resources --splash命令

这将为您创建所有正确的启动/图标文件并将它们添加到config.xml文件中。 然后那个警告就消失了。

希望这有效!

我建议使用 cordova-icon 和 cordova-splash npm 包。 这是因为您可以在根目录中放置两个图像,然后命令将为您解决其余的问题。 它们由cordova编写,您可以使用以下方法安装:

npm install -g cordova-icon
npm install -g cordova-splash

然后在项目根目录中放置一个 1024x1024 版本的徽标作为“icon.png”。 并且:

“初始屏幕图像应为 2208x2208 像素,中心正方形约为 1200x1200 像素。图像可能会围绕中心正方形进行裁剪。”

https://www.npmjs.com/package/cordova-splash

只需将与该描述匹配的图像作为“splash.png”放在项目根目录中

删除 config.xml 中指定要用于 ios 的图像的任何行,cordova-icon/splash 会自动将它们以正确的名称放在正确的位置,以便 xcode 识别它们。

完成设置后,只需执行以下命令:

cordova platform remove ios
cordova platform add ios
cordova-icon
cordova-splash

然后运行您的构建命令。 对我来说是:

cordova build ios --build-config

但是您可能没有构建配置,或者需要额外的参数。 如果构建失败(确保您运行命令,即使您认为它会失败 - 它会设置一切)只需在 xcode 中的平台 / ios 中打开生成的工作区,清理项目,然后构建。 那应该工作。

  1. 重命名平台/ios
  2. 在终端类型上: cordova platform add ios
  3. cordova build ios

在我的情况下工作

对于单独的icon.png文件,图像必须是1024x1024才能在config.xml 中使用单独的<icon src="icon.png"/>

我必须使用cordova-cli 6.5.0cordova-ios 4.5.1xcodebuild 9.0

我在使用cordova-icon时遇到了这个错误,但我的icon.png图像不是方形的。

icon.png更改为方形图像并重新执行cordova-icon意味着cordova build ios现在适用于我。

我尝试过的简单解决方案是添加正确大小的图像 1024x1024

   <platform name="ios">
        <icon src="res/icon-1024.png" />
    </platform>

在深入研究 cordova_lib 之后,我认为很明显(对我而言)cordova 不应该为您调整图标的大小,而仅在它们存在且尺寸正确时才复制它们。

在cordova-lib\\src\\cordova\\metadata\\ios_parser.js 中查看此代码:

// See https://developer.apple.com/library/ios/documentation/userexperience/conceptual/mobilehig/LaunchImages.html
// for launch images sizes reference.
var platformIcons = [
    {dest: 'icon-60.png', width: 60, height: 60},
    {dest: 'icon-60@2x.png', width: 120, height: 120},
    {dest: 'icon-60@3x.png', width: 180, height: 180},
    {dest: 'icon-76.png', width: 76, height: 76},
    {dest: 'icon-76@2x.png', width: 152, height: 152},
    {dest: 'icon-small.png', width: 29, height: 29},
    {dest: 'icon-small@2x.png', width: 58, height: 58},
    {dest: 'icon-40.png', width: 40, height: 40},
    {dest: 'icon-40@2x.png', width: 80, height: 80},
    {dest: 'icon.png', width: 57, height: 57},
    {dest: 'icon@2x.png', width: 114, height: 114},
    {dest: 'icon-72.png', width: 72, height: 72},
    {dest: 'icon-72@2x.png', width: 144, height: 144},
    {dest: 'icon-50.png', width: 50, height: 50},
    {dest: 'icon-50@2x.png', width: 100, height: 100}
];

var destIconsFolder, destSplashFolder;
var xcassetsExists = folderExists(path.join(platformRoot, 'Images.xcassets/'));

if (xcassetsExists) {
    destIconsFolder = 'Images.xcassets/AppIcon.appiconset/';
} else {
    destIconsFolder = 'Resources/icons/';
}

platformIcons.forEach(function (item) {
    var icon = icons.getBySize(item.width, item.height) || icons.getDefault();
    if (icon){
        var src = path.join(appRoot, icon.src),
            dest = path.join(platformRoot, destIconsFolder, item.dest);
        events.emit('verbose', 'Copying icon from ' + src + ' to ' + dest);
        shell.cp('-f', src, dest);
    }
});

最好的选择似乎是使用一个插件,它通过钩子为你调整大小。 查看在 Cordova / PhoneGaphttps://github.com/disusered/cordova-icon-gm 中生成 iOS 和 Android 图标以获取相同插件的新的更具前瞻性的版本(目录中的钩子在 6.x 中已弃用)。

我设法通过删除 config.xml 中的非故事板飞溅引用来解决这个问题,最新版本的cordova似乎只使用故事板:

所以删除:

    <splash src="res/ios/splash/Default~iphone.png" width="320" height="480"/>
    <splash src="res/ios/splash/Default@2x~iphone.png" width="640" height="960"/>
    <splash src="res/ios/splash/Default-Portrait~ipad.png" width="768" height="1024"/>
    <splash src="res/ios/splash/Default-Portrait@2x~ipad.png" width="1536" height="2048"/>
    <splash src="res/ios/splash/Default-Landscape~ipad.png" width="1024" height="768"/>
    <splash src="res/ios/splash/Default-Landscape@2x~ipad.png" width="2048" height="1536"/>
    <splash src="res/ios/splash/Default-568h@2x~iphone.png" width="640" height="1136"/>
    <splash src="res/ios/splash/Default-667h.png" width="750" height="1334"/>
    <splash src="res/ios/splash/Default-736h.png" width="1242" height="2208"/>
    <splash src="res/ios/splash/Default-Landscape-736h.png" width="2208" height="1242"/>

并且只保留了这些:

        <splash src="res/ios/splash/Default@2x~iphone~anyany.png" />
        <splash src="res/ios/splash/Default@2x~iphone~comany.png" />
        <splash src="res/ios/splash/Default@2x~iphone~comcom.png" />
        <splash src="res/ios/splash/Default@3x~iphone~anyany.png" />
        <splash src="res/ios/splash/Default@3x~iphone~anycom.png" />
        <splash src="res/ios/splash/Default@3x~iphone~comany.png" />
        <splash src="res/ios/splash/Default@2x~ipad~anyany.png" />
        <splash src="res/ios/splash/Default@2x~ipad~comany.png" />

这不是一个困难的错误。唯一要做的就是删除所有行

图像.xcastsets

来自

平台/ios/.xcodeproject

然后删除platform ionic cordova platform rm ios,再次添加platform,build。

离子cordova平台添加ios

离子科尔多瓦构建ios

我遇到了与 OP 相同的问题,虽然接受的答案是正确且有帮助的,但现在 npm 上有一个更新(和维护)的资源生成器,称为cordova-res,它取代了cordova-icon 和cordova-splash。 此外,所需的启动画面尺寸也增加了。 您需要的所有详细信息都在npmjs cordova-res 页面上,我从中获取了以下信息。

安装:

npm install -g cordova-res 

你需要准备好你的 icon.png 和 splash.png(网站说 JPEG 或 PNG)图像。 这些需要具有以下尺寸:

icon.(png|jpg) 必须至少为 1024 × 1024px

splash.(png|jpg) 必须至少为 2732 × 2732px(注意增加的尺寸)

只是关于闪屏的一点说明。 您的图像需要位于初始屏幕的中心,以便在不裁剪初始屏幕图像的情况下生成不同矩形设备大小的图像。 正如公认的答案所说,此中心图像的大小需要约为 1200 x 1200 像素。

将这些图像放在项目的资源文件夹中:

resources/
├── icon.png
└── splash.png

在您生成资源之前,可能值得删除和添加您的 ios 平台(以及其他平台,如果您也在构建它们)以从一个干净的平台文件夹开始。 我不确定这是否有必要。

cordova platform remove ios
cordova platform add ios

运行以下命令以生成资源:

$ cordova-res

然后你可以构建你的平台:

cordova build ios

现在一切都应该没问题,并希望解决您的 xcassets 错误,就像对我所做的那样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM