iOS开发-Bundle文件中的nib(xib 编译成 nib)
2017-11-15 本文已影响0人
037e3257fa3b
xib与nib
开发中,我们在使用他人的库文件时,时常会遇到使用Bundle资源文件的情况。当静态库项目中存在xib文件时,放入Bundle文件中的xib需要编译成nib文件,因为Bundle文件放入项目中后是不会编译的,如果直接将xib放入Bundle文件中,启动项目后会出现报一个加载nib资源文件失败的问题。因此,这篇文章的价值就体现出来了,下午特意制作了一个shell脚本来 将一个xib 编译成 对应的 nib 文件 和 将一个文件夹中xib文件 编译成 对应的 nib文件。
F8BB7E20-5D05-4AFC-B30D-B15DCA6706C2.png效果截图
单个xib文件快速制作
终端格式
$1 要生成的nib文件名 如TableViewCell.nib
$2 要编译的xib文件路径 如TableViewCell.xib
ibtool --errors --warnings --output-format human-readable-text --compile ibtool --errors --warnings --output-format human-readable-text --compile $1 $2
e.g.:
8E2BE64C-BC89-40A7-A6CA-ED46CCD7D018.pngBundle制作
网上文章较多,这里给一个链接iOS 制作Bundle
脚本分享
说明:
使用方法:
1.将xib文件或包含xib文件的文件夹 以及 nib.sh 放在同一个目录下;
2.cd 到该目录下
3.终端执行命令 bash nib.sh xib文件或文件夹
报错:
xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' 。。。
解决该问题只需要设置xcode中的命令行工具:打开Xcode -> 左上角Xcode -> Preference.. -> Locations -> Command Line Tools 选择最新即可。
命令行工具
7E07A51A-9B2F-4F2A-ADC8-17165BE2DF82.png#######nib.sh
#!/bin/bash
# 将xib编译成nib文件
function transitionToNib(){
ibtool --errors --warnings --output-format human-readable-text --compile ibtool --errors --warnings --output-format human-readable-text --compile $1 $2
}
#处理输入的参数 并编译成nib (/Users/zengchunjun/Desktop/selfStudy/xib-\>nib/TableViewCell.xib 分离出TableViewCell.xib 与 TableViewCell.nib)
function handlFile(){
ORIGIN=$1
echo $1
XIBFILE=${ORIGIN##*/}
echo "$XIBFILE xib文件"
FILENAME="${ORIGIN%.*}"
NIBFILEDIR=$FILENAME".nib"
NIBFILE=${NIBFILEDIR##*/}
echo "$FILENAME file名"
echo "$NIBFILE nib文件"
transitionToNib $NIBFILE $XIBFILE
}
#循环目录,将每个xib编译成nib
function scandir() {
local cur_dir parent_dir workdir
workdir=$1
cd ${workdir}
if [ ${workdir} = "/" ]
then
cur_dir=""
else
cur_dir=$(pwd)
fi
for dirlist in $(ls ${cur_dir})
do
if test -d ${dirlist};then
cd ${dirlist}
scandir ${cur_dir}/${dirlist}
cd ..
else
echo "${cur_dir}/${dirlist} 子文件"
handlFile ${cur_dir}/${dirlist}
fi
done
}
#判断是否有输入参数 需输入一个xib文件 或 一个只包含xib的文件 注意,xib文件名不能为空,否则不会被编译成nib
if [ ! -n "$1" ] ;then
echo "you have not input a xibfile or directory of xibfile!"
return
else
echo "the word you input is $1"
fi
#判断是文件还是文件夹
if test -d $1
then
echo "you input a directory"
scandir $1
exit 1
elif test -f $1
then
echo "you input a xibfile "
handlFile $1
exit 1
else
echo "the Directory isn't exist which you input,pls input a new one!!"
exit 1
fi