如何使用shell脚本将svg中的png添加到XCode项目中?

时间:2014-12-06 00:22:31

标签: xcode assets

有没有办法使用XCode外部的工具/脚本更新项目的资产?

我在Inkscape中绘制我的图标。我最近发现用这样一个简单的脚本:

#!/bin/sh

tail=$(basename "$1")
name="${tail%.*}"

/Applications/Inkscape.app/Contents/Resources/bin/inkscape -d 135 --export-png ${name}@3x.png   ${name}.svg 
/Applications/Inkscape.app/Contents/Resources/bin/inkscape -d 90 --export-png ${name}@2x.png ${name}.svg 
/Applications/Inkscape.app/Contents/Resources/bin/inkscape -d 45 --export-png ${name}.png ${name}.svg

我可以在分辨率下自动生成具有适当名称的3个不同的png。比点击式点击互动路线容易得多。

我喜欢做的是在脚本的末尾添加一些内容,这些内容会自动将这3个png注入XCode项目的Assets中。但我不知道XCode如何/在哪里管理这些。

完整脚本

完整的脚本,源自@Matthias的答案(我的SVG目录作为项目目录的兄弟姐妹)...

#!/bin/sh

tail=$(basename "$1")
name="${tail%.*}"
ProjectName=myValve

Target=../${ProjectName}/Images.xcassets/${name}.imageset
mkdir -p ${Target}

/Applications/Inkscape.app/Contents/Resources/bin/inkscape -d 135 --export-png ${Target}/${name}@3x.png ${name}.svg
/Applications/Inkscape.app/Contents/Resources/bin/inkscape -d 90 --export-png ${Target}/${name}@2x.png ${name}.svg
/Applications/Inkscape.app/Contents/Resources/bin/inkscape -d 45 --export-png ${Target}/${name}.png ${name}.svg

cat > ${Target}/Contents.json << __EOF__
{
 "images" : [
  {
   "idiom" : "universal",
   "scale" : "1x",
   "filename" : "${name}.png"
  },
  {
   "idiom" : "universal",
   "scale" : "2x",
   "filename" : "${name}@2x.png"
  },
  {
   "idiom" : "universal",
   "scale" : "3x",
   "filename" : "${name}@3x.png"
  }
 ],
 "info" : {
  "version" : 1,
  "author" : "xcode"
 }
}
__EOF__

2 个答案:

答案 0 :(得分:1)

我没有副本&amp;粘贴解决方案,但我可以提供一个起点。

我刚刚添加了3张图片,文件结构看起来很简单。这是git中的文件差异:

new file:   ObjCTest/Images.xcassets/Image123.imageset/Contents.json
new file:   ObjCTest/Images.xcassets/Image123.imageset/Image123.png
new file:   ObjCTest/Images.xcassets/Image123.imageset/Image123@2x.png
new file:   ObjCTest/Images.xcassets/Image123.imageset/Image123@3x.png

所以你不必像项目一样触摸xml的东西 而且Contents.json也不复杂:

{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Image123.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Image123@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Image123@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

Xcode 6有几个选项可以在资源编辑器中设置。如果您需要,请更改它们并查看Contents.json如何更改。

答案 1 :(得分:0)

我创建了一个mac app,这使得过程更容易,希望更顺畅。看看Speculid。它读取contents.json文件并从源图像(包括SVG文件)中正确创建正确缩放的图形。让我知道您的反馈意见。我非常赞赏它。