iOS工程-批量添加图片资源

  • 将图片资源一个个拽到 XCode 实在太麻烦了,于是我想用 Shell 脚本实现一劳永逸的方案。下面以某个 iPad 工程的情景为例去编写脚本(只用到 @2x 的图片)。

xcassets.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash

json_file="/Users/fang/Lab/Shell/xcassets/Contents.json"
orig_path="/Users/fang/Lab/Shell/xcassets/images"
dest_path="/Users/fang/Lab/iOS/TestProject/Images.xcassets"

imgs=`find $orig_path -name "*@2x.*"`
for img in $imgs; do
filename=`basename $img`
img_name="${filename%@*}"

folder="$dest_path/$img_name.imageset"
if [ ! -d $folder ]; then
mkdir $folder
fi

cp -r $img $folder
cp -r $json_file $folder
sed -e 's/\$FILE_NAME/'$img_name'/g' $json_file > "$folder/Contents.json"
done

接口设计

这里不讨论详细设计,只从项目开发角度考虑,关注点为开发效率和稳健性。

问题

APP 使用中最不可容忍的莫过于闪退问题,而许多 crash 源于网络请求的返回值格式非法。

使用命令行发表 Blog

最近在玩 hexo 这个博客框架,有个需求是,在本地用 MarkDown 编辑好文章,能够高效地在服务端发表。于是使用 Shell 写了以下脚本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

inputFile=$1
if [ ! -f $inputFile ]; then
echo "缺少文件"
exit
fi

shift

while echo $1 | grep ^- > /dev/null; do
eval $( echo $1 | sed 's/-//g' | tr -d '\012')=$2
shift
shift
done

fileName=`basename $inputFile`
path="/Users/fang/Workspace/Blog/trunk/hexo/$fileName"

# 第一行内容为 ## XXX,其中 XXX 为标题
first_line=`head -n 1 $inputFile`
title=${first_line#\#\# }

# 使用当前的时间作为发布时间
myDate=`date "+%Y-%m-%d %H:%M:%S"`

echo "title: $title" > $path
echo "date: $myDate" >> $path

# 命令行可接受 tags 参数
if [ ! -z $tags ]; then
echo "tags: $tags" >> $path
fi

echo "---" >> $path

# 将此前 .md 文件中第一行忽略
sed 1d $inputFile >> $path

scp $path xxx@xxxx.com:~/hexo/source/_posts

ssh xxx@xxxx.com "cd ~/hexo/; hexo generate -d"

DisplayMetrics

参考链接: http://developer.android.com/reference/android/util/DisplayMetrics.html

Supporting Multiple Screens

http://developer.android.com/guide/practices/screens_support.html

终端下简单地运行 Java 代码

脚本如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
set -e

fileName=$1
if [ -z "$fileName" ]; then
echo "Parameters error!"
exit
fi

if [ ! -d classes ]; then
mkdir classes
fi
className=${fileName%%.*}
javac $className.java -d ./classes/
java -classpath ./classes $className

Android 保持字体缩放比例

textSize 的单位一般使用 sp,sp 与系统字体大小相关,1sp 占据的大小相当于 1d p乘以 fontScale。系统字号为 normal 时,fontScale = 1;字号越大 fontScale 的值越大。

有些情境下,我们希望在 APP 中保持字体的缩放比,而不随系统字体变化而变化。做法有两种:

iOS Bookmarks

Common

观察者模式

简述

观察者模式其实很简单也很常用。比如 ListView 的数据发生改变时,我们一般会让 Adapter 去调用 notifyDataSetChanged 方法,去通知列表更新视图,实际上原理就是观察者模式相同。

JSPatch

参考链接

JSPatch - 动态更新iOS APP: http://blog.cnbang.net/works/2767/