終端用shell讀寫plist檔案

2021-10-10 17:11:14 字數 4437 閱讀 5507

【原帖置頂】shell檔案中讀取plist檔案並實現shell中的數值計算

mac操作plist檔案用plistbuddy,路徑在/usr/libexec/plistbuddy

先準備乙個簡單的plist檔案,當前bundleversion的值為1。

測試用的plist

這個plist檔案對應的xml**:

<?xml version="1.0" encoding="utf-8"?>

udid

bf76c991995e61c5c783f3441bff4a18605bc7ba

bundleid

com.foobar2000.mobile

ipapath

/users/ypf/desktop

cfbundleshortversionstring

1.0cfbundleversion

1nsallowsarbitraryloads

// print:讀取值並列印的命令

// /usr/libexec/plistbuddy -c:指定plistbuddy的路徑

// -c:後接要執行的命令(不負責任地猜測是傳遞cmd引數的意思^_^)

// cfbundleversion:要讀取value的key

// /users/ypf/desktop/test.plist:plist檔案的路徑

/usr/libexec/plistbuddy -c "print cfbundleversion" /users/ypf/desktop/test.plist

執行效果

這個值後面還要用,所以需要定義乙個變數儲存起來~~

bundleversion=$(/usr/libexec/plistbuddy -c "print cfbundleversion" /users/ypf/desktop/test.plist)

echo $bundleversion

終端下直接寫+-*/(加減乘除)會被當做字串,寫計算表示式要用到expr

// 注意!expr之後有個空格

bundleversion=`expr $bundleversion + 1`

echo $bundleversion輸出結果,可以看到bundleversion的新值為2.

計算bundleversion的新值

plistbuddy向plist檔案寫入命令為set

// 指定plist路徑、目標鍵值對的key

/usr/libexec/plistbuddy -c "set cfbundleversion $bundleversion" /users/ypf/desktop/test.plist

執行上述命令後,bundleversion的新值為2。

執行結果

shell檔案中讀取plist檔案並實現shell中的數值計算

#!/bin/bash

#author jileniao.net

schemename='jileniao'

date=`date +%y%m%d_%h%m`

sourcepath=$( cd "$( dirname $0 )" && pwd)

ipapath=$sourcepath

disname=$schemename"_"$date

archname=$disname.xcarchive

ipaname=$disname

exportoptions='exportoptions.plist'

infoplist=$schemename/info.plist

bundle_id='net.jileniao.iosblog'

display_name='極樂鳥'

version_name='1.0.5'

#build_code='153'

provision_profile='jileniao-dis'

if [ -n "$1" ]; then

# extra parameter 1

firm -rf ./build

rm main.jsbundle

rm main.jsbundle.meta

rm -rf ./build

rm -rf ./modulecache

rm -rf ./logs

xcodebuild clean

curr=`pwd`

cd .. && react-native bundle --entry-file index.js --platform ios --dev false --bundle-output ios/main.jsbundle --assets-dest ios/

cd $curr

# 先讀取之前的build_code,加1得到新的build_code

build_code=$(/usr/libexec/plistbuddy -c "print cfbundleversion" $infoplist)

build_code=`expr $build_code + 1`

# 設定編譯引數

/usr/libexec/plistbuddy -c "set cfbundledisplayname $display_name" $infoplist

/usr/libexec/plistbuddy -c "set cfbundleshortversionstring $version_name" $infoplist

/usr/libexec/plistbuddy -c "set cfbundleversion $build_code" $infoplist

/usr/libexec/plistbuddy -c "set cfbundleidentifier $bundle_id" $infoplist

/usr/libexec/plistbuddy -c "delete provisioningprofiles" $exportoptions

/usr/libexec/plistbuddy -c "add provisioningprofiles dict" $exportoptions

/usr/libexec/plistbuddy -c "add provisioningprofiles:$bundle_id string $provision_profile" $exportoptions

# 構建

xcodebuild archive \

-project jileniao.xcodeproj \

-scheme $schemename \

-configuration release \

-archivepath $archname \

clean \

build \

-deriveddatapath ./

if [ -e $archname ]; then

echo "xcodebuild archive successful"

else

echo "xcodebuild archive failed"

exit 1

fi# 匯出ipa

xcodebuild -exportarchive \

-archivepath $archname \

-exportpath $ipaname \

-exportoptionsplist $exportoptions

if [ -e $ipaname ]; then

echo "export ipa successful"

open $ipapath

else

echo "export ipa failed"

exit 1

fi#刪除臨時檔案

rm -rf $archname

rm -rf ./build

rm -rf ./modulecache

rm -rf ./logs

plist檔案的讀寫

在做ios開發時,經常用到到plist檔案,那plist檔案是什麼呢?它全名是 property list,屬性列表檔案,它是一種用來儲存序列化後的物件的檔案。屬性列表檔案的擴充套件名為 plist 因此通常被稱為 plist檔案。檔案是xml格式的。plist檔案通常用於儲存使用者設定,也可以用於...

讀寫 plist檔案的例子

想在乙個類裡把個陣列寫進.plist檔案裡,再在另乙個類裡從這個.plist檔案把陣列讀取出來?以name,phonenumber,age三個字段,為例。我是做的iphone,在文字框中輸入資料,獲取後,裝入陣列中。然後把陣列寫入.plist檔案 寫操作nsstring name txt1 text...

ios開發入門 plist 檔案讀寫

在xcode中建立乙個專案 會在supportion files 目錄下 看見乙個已plist字尾型別的檔案,這個檔案 是以 key value 存放的鍵 值對的值。它全名是 property list,屬性列表檔案,它是一種用來儲存序列化後的物件的檔案。屬性列表檔案的擴充套件名為.plist 因此...