RaviMalviya
7/31/2016 - 9:36 AM

PJSIP Library Integration in xcode 7

PJSIP Library Integration in xcode 7

*checout svn:
bew install svn(if don't have)
svn co http://svn.pjsip.org/repos/pjproject/trunk

*Building Preparation 
goto /Users/ravimalviya/Developer/Dev2/trunk/pjlib/include/pj
Create file named config_site.h
having this contains follow
#define PJ_CONFIG_IPHONE 1
#include <pj/config_site_sample.h>

//////////////////////////////////////////////////
How to build PJSIP libraries for iOS
//////////////////////////////////////////////////

--- One Way to build PJSIP libraries --- test with pjsip 2.5.5

PJSIP is a multimedia communication library well suited for building VoIP and video applications. Official website.

There is Getting Started documentation about building for iOS but we usually need as the result multi architecture (universal) static library. To be useful for modern projects it should contain armv7, armv7s and arm64 architectures for devices and i386, x86_64 architectures for Simulator.

Updated for XCode 7. 

Prerequisites: Xcode 5 with command-line tools, optional - OpenSSL for iOS.

For building with OpenSSL, uncomment line 2 in script below and set OPENSSL_DIR variable to top-level directory of OpenSSL iOS build.
Execute script from base directory of PJSIP. After completion in directory ./lib you find universal libraries ready to be used in Xcode.

Script for building PJSIP for iOS with OpenSSL for iOS support:

#!/bin/sh  
 #export OPENSSL_DIR='../OpenSSL'  
 export CFLAGS='-miphoneos-version-min=7.0'  
 export LDFLAGS='-miphoneos-version-min=7.0'  
 export XC_BASE=`xcode-select --print-path`  
 rm -rf ./lib/*  
 mkdir -p ./lib/armv7  
 mkdir -p ./lib/armv7s  
 mkdir -p ./lib/arm64  
 mkdir -p ./lib/i386  
 mkdir -p ./lib/x86_64  
 export ARCH='-arch armv7'  
 make realclean  
 ./configure-iphone --with-ssl="${OPENSSL_DIR}"  
 make realclean depend all  
 find ./ -name '*.a' -type f | grep -v '^\.\/\/lib' | xargs -J ^ mv ^ ./lib/armv7/  
 export ARCH='-arch armv7s'  
 make realclean  
 ./configure-iphone --with-ssl="${OPENSSL_DIR}"  
 make realclean depend all  
 find ./ -name '*.a' -type f | grep -v '^\.\/\/lib' | xargs -J ^ mv ^ ./lib/armv7s/  
 export ARCH='-arch arm64'  
 make realclean  
 ./configure-iphone --with-ssl="${OPENSSL_DIR}"  
 make realclean depend all  
 find ./ -name '*.a' -type f | grep -v '^\.\/\/lib' | xargs -J ^ mv ^ ./lib/arm64/  
 export DEVPATH="${XC_BASE}/Platforms/iPhoneSimulator.platform/Developer"  
 export ARCH='-arch i386'  
 make realclean  
 ./configure-iphone --with-ssl="${OPENSSL_DIR}"  
 make realclean depend all  
 find ./ -name '*.a' -type f | grep -v '^\.\/\/lib' | xargs -J ^ mv ^ ./lib/i386/  
 export ARCH='-arch x86_64'  
 make realclean  
 ./configure-iphone --with-ssl="${OPENSSL_DIR}"  
 make realclean depend all  
 find ./ -name '*.a' -type f | grep -v '^\.\/\/lib' | xargs -J ^ mv ^ ./lib/x86_64/  
 cd ./lib/arm64  
 ls -1| sed -e 's/^\(\(.*\)-arm64-apple-darwin_ios\.a\)/\1 \2.a/' | xargs -n2 mv  
 cd ../armv7  
 ls -1| sed -e 's/^\(\(.*\)-armv7-apple-darwin_ios\.a\)/\1 \2.a/' | xargs -n2 mv  
 cd ../armv7s  
 ls -1| sed -e 's/^\(\(.*\)-armv7s-apple-darwin_ios\.a\)/\1 \2.a/' | xargs -n2 mv  
 cd ../i386  
 ls -1| sed -e 's/^\(\(.*\)-i386-apple-darwin_ios\.a\)/\1 \2.a/' | xargs -n2 mv  
 cd ../x86_64  
 ls -1| sed -e 's/^\(\(.*\)-x86_64-apple-darwin_ios\.a\)/\1 \2.a/' | xargs -n2 mv  
 cd ../  
 ls -1 arm64/|xargs -n1 -R -1 -I ^ echo x86_64/^ i386/^ arm64/^ armv7/^ armv7s/^ -create -output ^ |xargs -L1 xcrun lipo  
 cd ../  
 
 Note: open project file in pjsip downloaded project where configure-iphone is placed. add target of bundle type and disable bitcode in project setting,
 and add this script and build project in this same bundle.
 universal library will be build in lib folder that all arch supported.
 
----One way end here-------------------------

--- Second Way to build PJSIP libraries --- test with pjsip 2.6

//Updated for XCode 8. 

Building PJSIP
$ cd /Users/ravimalviya/Developer/Dev2/trunk

//If you want to specify the minimum supported iOS version
//export MIN_IOS="-miphoneos-version-min=8.0"

Compile Library and Build For Default iPhone 4 use armv7 architecture
$ ./configure-iphone && make dep && make clean && make

Build For iPhone 5, use armv7s architecture
$ ARCH='-arch armv7s' ./configure-iphone && make dep && make clean && make

Build For iPhone 5s, use arm64 architecture
$ ARCH='-arch arm64' ./configure-iphone && make dep && make clean && make

Build For Simulator, use i386 architecture
export DEVPATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer
ARCH="-arch i386" CFLAGS="-O2 -m32 -mios-simulator-version-min=5.0" LDFLAGS="-O2 -m32 -mios-simulator-version-min=5.0" ./configure-iphone
make dep && make clean && make

Build For Simulator, use x86_64 architecture
export DEVPATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer
ARCH="-arch x86_64" CFLAGS="-O2 -m32 -mios-simulator-version-min=5.0" LDFLAGS="-O2 -m32 -mios-simulator-version-min=5.0" ./configure-iphone
make dep && make clean && make

The compilation result
pjlib/lib       
pjlib-util/lib
pjmedia/lib
pjsip/lib
pjnath/lib
third_party/lib
Note add into project..

Combine resulting archtecture(arm64,armv7,armv7s,i386, x86_64) supported library .a file.

//goto directory where you collect all build library. create folder name arm64, armv7s, armv7, i386, x86_64 and put all library respectivly. each having only one arch supported library file.
//rename file in all these 5 folders it's a easy way to make universal library.
//Also create folder named unified where all unversal library will create.

$ export LIB_NAME="libg7221codec.a"
$ lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME

//-arch armv7s armv7s/$LIB_NAME means support armv7s get library from directory armv7s/$LIB_NAME and $LIB_NAME file name that only support armv7s.
//-arch arm64 arm64/$LIB_NAME ............
//-arch armv7 armv7/$LIB_NAME ............
//-arch i386 i386/$LIB_NAME ..............
//-arch x86_64 x86_64/$LIB_NAME ..............
//unified/$LIB_NAME is directory where unversal library will build using lips. with same name $LIB_NAME that export. do it same.

//check which arch you lib is supporting
xcrun -sdk iphoneos lipo -info unified/$LIB_NAME

$ export LIB_NAME="libgsmcodec.a"
$ lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
$ export LIB_NAME="libilbccodec.a"
$ .....same as above in lipo......
$ export LIB_NAME="libpj.a"
$ .....same as above in lipo......
$ export LIB_NAME="libpjlib-util.a"
$ .....same as above in lipo......
$ export LIB_NAME="libpjmedia-audiodev.a"
$ .....same as above in lipo......
$ export LIB_NAME="libpjmedia-codec.a"
$ .....same as above in lipo......
$ export LIB_NAME="libpjmedia-videodev.a"
$ .....same as above in lipo......
$ export LIB_NAME="libpjmedia.a"
$ .....same as above in lipo......
$ export LIB_NAME="libpjnath.a"
$ .....same as above in lipo......
$ export LIB_NAME="libpjsdp.a"
$ .....same as above in lipo......
$ export LIB_NAME="libpjsip-simple.a"
$ .....same as above in lipo......
$ export LIB_NAME="libpjsip-ua.a"
$ .....same as above in lipo......
$ export LIB_NAME="libpjsip.a"
$ .....same as above in lipo......
$ export LIB_NAME="libpjsua.a"
$ .....same as above in lipo......
$ export LIB_NAME="libpjsua.a"
$ .....same as above in lipo......
$ export LIB_NAME="libpjsua2.a"
$ .....same as above in lipo......
$ export LIB_NAME="libresample.a"
$ .....same as above in lipo......
$ export LIB_NAME="libspeex.a"
$ .....same as above in lipo......
$ export LIB_NAME="libsrtp.a"
$ .....same as above in lipo......
$ export LIB_NAME="libyuv.a"
$ lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME

/-----Lets want to see terminal logs----/
ravis-iMac:pjproject-2.6 ravi.kumar$ cd /Users/admin/Developer/DEMO2/Voip/PJSIP/pjproject-2.6/lib 
ravis-iMac:lib ravi.kumar$ export LIB_NAME="libg7221codec-apple-darwin_ios.a"
ravis-iMac:lib ravi.kumar$ lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
ravis-iMac:lib ravi.kumar$ xcrun -sdk iphoneos lipo -info unified/$LIB_NAME
Architectures in the fat file: unified/libg7221codec-apple-darwin_ios.a are: armv7 armv7s i386 x86_64 arm64 
ravis-iMac:lib ravi.kumar$ export LIB_NAME="libgsmcodec-apple-darwin_ios.a"
ravis-iMac:lib ravi.kumar$ lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
ravis-iMac:lib ravi.kumar$ export LIB_NAME="libilbccodec-apple-darwin_ios.a"
ravis-iMac:lib ravi.kumar$ lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
ravis-iMac:lib ravi.kumar$ export LIB_NAME="libpj-apple-darwin_ios.a"
ravis-iMac:lib ravi.kumar$ lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
ravis-iMac:lib ravi.kumar$ export LIB_NAME="libpjlib-util-apple-darwin_ios.a"
ravis-iMac:lib ravi.kumar$ lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
ravis-iMac:lib ravi.kumar$ export LIB_NAME="libpjmedia-apple-darwin_ios.a"
ravis-iMac:lib ravi.kumar$ lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
ravis-iMac:lib ravi.kumar$ export LIB_NAME="libpjmedia-audiodev-apple-darwin_ios.a"
ravis-iMac:lib ravi.kumar$ lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
ravis-iMac:lib ravi.kumar$ export LIB_NAME="libpjmedia-codec-apple-darwin_ios.a"
ravis-iMac:lib ravi.kumar$ lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
ravis-iMac:lib ravi.kumar$ export LIB_NAME="libpjmedia-videodev-apple-darwin_ios.a"
ravis-iMac:lib ravi.kumar$ lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
ravis-iMac:lib ravi.kumar$ export LIB_NAME="libpjnath-apple-darwin_ios.a"
ravis-iMac:lib ravi.kumar$ lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
ravis-iMac:lib ravi.kumar$ export LIB_NAME="libpjsdp-apple-darwin_ios.a"
ravis-iMac:lib ravi.kumar$ lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
ravis-iMac:lib ravi.kumar$ export LIB_NAME="libpjsip-apple-darwin_ios.a"
ravis-iMac:lib ravi.kumar$ lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
ravis-iMac:lib ravi.kumar$ export LIB_NAME="libpjsip-simple-apple-darwin_ios.a"
ravis-iMac:lib ravi.kumar$ lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
ravis-iMac:lib ravi.kumar$ export LIB_NAME="libpjsip-ua-apple-darwin_ios.a"
ravis-iMac:lib ravi.kumar$ lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
ravis-iMac:lib ravi.kumar$ export LIB_NAME="libpjsua-apple-darwin_ios.a"
ravis-iMac:lib ravi.kumar$ lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
ravis-iMac:lib ravi.kumar$ export LIB_NAME="libpjsua2-apple-darwin_ios.a"
ravis-iMac:lib ravi.kumar$ lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
ravis-iMac:lib ravi.kumar$ export LIB_NAME="libresample-apple-darwin_ios.a"
ravis-iMac:lib ravi.kumar$ lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
ravis-iMac:lib ravi.kumar$ export LIB_NAME="libspeex-apple-darwin_ios.a"
ravis-iMac:lib ravi.kumar$ lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
ravis-iMac:lib ravi.kumar$ export LIB_NAME="libsrtp-apple-darwin_ios.a"
ravis-iMac:lib ravi.kumar$ lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
ravis-iMac:lib ravi.kumar$ export LIB_NAME="libwebrtc-apple-darwin_ios.a"
ravis-iMac:lib ravi.kumar$ lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
ravis-iMac:lib ravi.kumar$ export LIB_NAME="libyuv-apple-darwin_ios.a"
ravis-iMac:lib ravi.kumar$ lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
/-----end of terminal logs----/

Note: Unversal libraries you can add into your project and also mention in library search path.

//In order to use the pjsip libraries, we need to include folder that ahve header files that access .a files. Naturally, the header files are located in:
pjlib/include
pjlib-util/include
pjmedia/include
pjnath/include
pjsip/include

Note: do't add into project..buz you can not import like import <pjsip-lib/pjsip.h>
so just place these folder into project directory where ever you want but mention in header search path.

Enjoy (:)


--- Third Way to build PJSIP libraries --- test with pjsip 2.6 (more easier)


#!/bin/sh
 
BASE_DIR=$(pwd)
 
# Create config_site.h file in path
echo "#define PJ_CONFIG_IPHONE 1
#define PJ_HAS_IPV6 1
#include <pj/config_site_sample.h>" > pjlib/include/pj/config_site.h
 
 
# Compile Library and Build For Default iPhone 4 use armv7 architecture
./configure-iphone && make dep && make clean && make
 
 
# Build For iPhone 5, use armv7s architecture
ARCH='-arch armv7s' ./configure-iphone && make dep && make clean && make
 
 
# Build For iPhone 5s, use arm64 architecture
ARCH='-arch arm64' ./configure-iphone && make dep && make clean && make
 
 
# Build For Simulator, use i386 architecture
export DEVPATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer
ARCH="-arch i386" CFLAGS="-O2 -m32 -mios-simulator-version-min=5.0" LDFLAGS="-O2 -m32 -mios-simulator-version-min=5.0" ./configure-iphone
make dep && make clean && make
 
 
# Build For Simulator, use x86_64 architecture
export DEVPATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer
ARCH="-arch x86_64" CFLAGS="-O2 -m32 -mios-simulator-version-min=5.0" LDFLAGS="-O2 -m32 -mios-simulator-version-min=5.0" ./configure-iphone
make dep && make clean && make
 
 
# Create (arm64,armv7,armv7s,i386, x86_64, unified) Folder
if [ ! -d libs/arm64 ];
then
mkdir -p libs/arm64
echo "arm64 Folder created"
else
echo "arm64 Folder exists"
fi
 
if [ ! -d libs/armv7 ];
then
mkdir -p libs/armv7
echo "armv7 Folder created"
else
echo "armv7 Folder exists"
fi
 
if [ ! -d libs/armv7s ];
then
mkdir -p libs/armv7s
echo "armv7s Folder created"
else
echo "armv7s Folder exists"
fi
 
if [ ! -d libs/i386 ];
then
mkdir -p libs/i386
echo "i386 Folder created"
else
echo "i386 Folder exists"
fi
 
if [ ! -d libs/x86_64 ];
then
mkdir -p libs/x86_64
echo "x86_64 Folder created"
else
echo "x86_64 Folder exists"
fi
 
if [ ! -d libs/unified ];
then
mkdir -p libs/unified
echo "unified Folder created"
else
echo "unified Folder exists"
fi
 
 
# Copy From pjlib folder to Libs
 
cp pjlib/lib/*-arm64-apple-darwin_ios.a libs/arm64/
cp pjlib/lib/*-armv7-apple-darwin_ios.a libs/armv7/
cp pjlib/lib/*-armv7s-apple-darwin_ios.a libs/armv7s/
cp pjlib/lib/*-i386-apple-darwin_ios.a libs/i386/
cp pjlib/lib/*-x86_64-apple-darwin_ios.a libs/x86_64/
 
# Copy From pjlib-util folder to Libs
 
cp pjlib-util/lib/*-arm64-apple-darwin_ios.a libs/arm64/
cp pjlib-util/lib/*-armv7-apple-darwin_ios.a libs/armv7/
cp pjlib-util/lib/*-armv7s-apple-darwin_ios.a libs/armv7s/
cp pjlib-util/lib/*-i386-apple-darwin_ios.a libs/i386/
cp pjlib-util/lib/*-x86_64-apple-darwin_ios.a libs/x86_64/
 
# Copy From pjmedia folder to Libs
 
cp pjmedia/lib/*-arm64-apple-darwin_ios.a libs/arm64/
cp pjmedia/lib/*-armv7-apple-darwin_ios.a libs/armv7/
cp pjmedia/lib/*-armv7s-apple-darwin_ios.a libs/armv7s/
cp pjmedia/lib/*-i386-apple-darwin_ios.a libs/i386/
cp pjmedia/lib/*-x86_64-apple-darwin_ios.a libs/x86_64/
 
# Copy From pjnath folder to Libs
 
cp pjnath/lib/*-arm64-apple-darwin_ios.a libs/arm64/
cp pjnath/lib/*-armv7-apple-darwin_ios.a libs/armv7/
cp pjnath/lib/*-armv7s-apple-darwin_ios.a libs/armv7s/
cp pjnath/lib/*-i386-apple-darwin_ios.a libs/i386/
cp pjnath/lib/*-x86_64-apple-darwin_ios.a libs/x86_64/
 
# Copy From pjsip folder to Libs
 
cp pjsip/lib/*-arm64-apple-darwin_ios.a libs/arm64/
cp pjsip/lib/*-armv7-apple-darwin_ios.a libs/armv7/
cp pjsip/lib/*-armv7s-apple-darwin_ios.a libs/armv7s/
cp pjsip/lib/*-i386-apple-darwin_ios.a libs/i386/
cp pjsip/lib/*-x86_64-apple-darwin_ios.a libs/x86_64/
 
# Copy From third_party folder to Libs
 
cp third_party/lib/*-arm64-apple-darwin_ios.a libs/arm64/
cp third_party/lib/*-armv7-apple-darwin_ios.a libs/armv7/
cp third_party/lib/*-armv7s-apple-darwin_ios.a libs/armv7s/
cp third_party/lib/*-i386-apple-darwin_ios.a libs/i386/
cp third_party/lib/*-x86_64-apple-darwin_ios.a libs/x86_64/
 
 
# Rename file name From Created folder
 
cd $BASE_DIR/libs/arm64/
rename 's/\-arm64\-apple\-darwin_ios//g' *.a
 
cd $BASE_DIR/libs/armv7/
rename 's/\-armv7\-apple\-darwin_ios//g' *.a
 
cd $BASE_DIR/libs/armv7s/
rename 's/\-armv7s\-apple\-darwin_ios//g' *.a
 
cd $BASE_DIR/libs/i386/
rename 's/\-i386\-apple\-darwin_ios//g' *.a
 
cd $BASE_DIR/libs/x86_64/
rename 's/\-x86_64\-apple\-darwin_ios//g' *.a
 
 
cd $BASE_DIR/libs/
 
# Combine Libs to united folder
 
export LIB_NAME="libg7221codec.a"
lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
 
export LIB_NAME="libgsmcodec.a"
lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
 
export LIB_NAME="libilbccodec.a"
lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
 
export LIB_NAME="libpj.a"
lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
 
export LIB_NAME="libpjlib-util.a"
lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
 
export LIB_NAME="libpjmedia-audiodev.a"
lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
 
export LIB_NAME="libpjmedia-codec.a"
lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
 
export LIB_NAME="libpjmedia-videodev.a"
lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
 
export LIB_NAME="libpjmedia.a"
lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
 
export LIB_NAME="libpjnath.a"
lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
 
export LIB_NAME="libpjsdp.a"
lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
 
export LIB_NAME="libpjsip-simple.a"
lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
 
export LIB_NAME="libpjsip-ua.a"
lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
 
export LIB_NAME="libpjsip.a"
lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
 
export LIB_NAME="libpjsua.a"
lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
 
export LIB_NAME="libpjsua2.a"
lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
 
export LIB_NAME="libresample.a"
lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
 
export LIB_NAME="libspeex.a"
lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
 
export LIB_NAME="libsrtp.a"
lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
 
export LIB_NAME="libyuv.a"
lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
 
export LIB_NAME="libwebrtc.a"
lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
 
 
echo 'Congratulation you have built PJSIP Library successfully'