当前位置:首页 » 编程软件 » ios自动编译脚本

ios自动编译脚本

发布时间: 2022-08-07 01:44:55

① iOS开发有没有办法做到自动化编译

完全可以,有在论坛上看到过批量打包的脚本

② ios下 怎么在代码中调用ffmpeg的命令

ffmpeg是一个多平台多媒体处理工具,处理视频和音频的功能非常强大。目前在网上搜到的iOS上使用FFMPEG的资料都比较陈旧,而FFMPEG更新迭代比较快; 且网上的讲解不够详细,对于初次接触FFMPEG的新手(例如我)来说确实不太好使用。为了防止忘记,这里对iOS下使用FFMPEG做一个总结。

1. FFMPEG层次结构的简单理解
要使用FFMPEG,首先需要理解FFMPEG的代码结构。根据志哥的提示,ffmpeg的代码是包括两部分的,一部分是library,一部分是tool。api都是在library里面,如果直接调api来操作视频的话,就需要写c或者c++了。另一部分是tool,使用的是命令行,则不需要自己去编码来实现视频操作的流程。实际上tool只不过把命令行转换为api的操作而已。

2. 预热-在mac os下使用ffmpeg
在mac os下使用ffmpeg比较简单,可以直接使用命令行来操作。首先安装ffmpeg,这里默认系统已经安装好brew,只需要在终端上输入:
brew install ffmpeg
等待安装结束即可。
安装结束后,尝试以下命令:
ffmpeg -i input.mp4 output.avi
如果能顺利转换,表明安装成功

3. 编译能在iOS下使用的FFMPEG library库
这一步是编译1所说的library,编译好之后可以调用FFMPEG的api。网上有一些方法,但都要自己手动编译,稍显复杂而且比较陈旧。按照app store的需求,编译出来的包还必须支持arm64。我在万能的github中找到一个能够"一键编译"的脚本,地址如下:
https://github.com/kewlbear/FFmpeg-iOS-build-script
而且写这个脚本的歪果仁挺好人,更新很及时,已经更新到了最新的2.5.3版本。下载下来,只有一个build-ffmpeg.sh脚本文件。在终端中转至脚本的目录,执行命令:
./build-ffmpeg.sh
脚本则会自动从github中把ffmpeg源码下到本地并开始编译。
编译结束后,文件目录如下:

其中,ffmpeg-2.5.3是源码,FFmpeg-iOS是编译出来的库,里面有我们需要的.a静态库,一共有7个。
执行命令:
lipo -info libavcodec.a
查看.a包支持的架构,这几个包都支持了armv7 armv7s i386 x86_64 arm64这几个架构,这个脚本果真是业界良心啊~~~

4.在xcode中引入FFMPEG library库
新建工程,把上面编译好的FFmpeg-iOS拖到xcode工程中,添加一个头文件引用

#include "avformat.h"
添加一个api语句:

av_register_all();
添加一个空的类,把执行文件.m后缀改为.mm,开启混编模式。
添加相应的framework,包括avfoundation和coremedia。
运行工程,如果没有报错,则表明编译成功。

5.在xcode项目中使用命令行
执行到第4步,已经可以使用library库了。但是如果要对视频进行操作,还是需要手动写很多代码去调用api,工作量较大,自然不如直接写命令行方便。为了命令行能够在xcode工程中使用,还需要做以下工作:
(1)添加源码中的tools,具体文件包括:


(2)添加Header Search Paths
在target--build setting中搜索Header Search Paths,并在Header Search Paths下面添加源码ffmpeg-2.5.3和scratch的路径。
(3)修改ffmpeg.h和ffmpeg.c源码

如果此时run这个工程,则会报错,原因是工程里面有2个main函数,此时处理方法为:
在ffmpeg.h中添加一个函数声明:
int ffmpeg_main(int argc, char **argv);
在ffmpeg.c中找到main函数,把main函数改为ffmpeg_main。
(4)调用命令行范例
添加头文件:#import "ffmpeg.h"
调用命令行
int numberOfArgs = 16;
char** arguments = calloc(numberOfArgs, sizeof(char*));

arguments[0] = "ffmpeg";
arguments[1] = "-i";
arguments[2] = inputPath;
arguments[3] = "-ss";
arguments[4] = "0";
arguments[5] = "-t";
arguments[6] = rationChar;
arguments[7] = "-vcodec";
arguments[8] = "";
arguments[9] = "-acodec";
arguments[10] = "aac";
arguments[11] = "-strict";
arguments[12] = "-2";
arguments[13] = "-b:a";
arguments[14] = "32k";
arguments[15] = outputPath;

int result = ffmpeg_main(numberOfArgs, arguments);
其中inputpath和outputpath是文件路径。经测试,这两个路径不支持asset-library://协议和file:// 协议,所以如果是要用相册的文件,我目前的解决办法是把它拷贝到沙盒里面。

6. 改关闭进程为关闭线程
如果顺利进行到了第5步,在app中是能够用命令行处理视频了,但会出现一个问题,app会退出。经肖大神提醒,发现了命令行执行完毕之后会退出进程。而iOS下只能启动一个进程,因此必须改关闭进程为关闭线程,或者直接把关闭进程的方法给注掉。

在ffmpeg.c中可以看到,执行退出进程的方法是exit_program,定位到了cmtils.c中执行了c语言的exit方法。这里我将它改为了pthread_exit(需要添加#include 头文件)。在xcode项目中使用时,则可以用NSThread来新开一个线程,执行完毕之后,把线程关闭了即可。再使用NSThreadWillExitNotification通知,即可监听线程退出的情况。

7. 修复ffmpeg.c里面的一个bug
在实际项目中,可能需要多次调用命令行,但在多次调用命令行的过程中,发现ffmpeg.c的代码中会访问空属性导致程序崩溃。逐步debug后发现,很多指针已经置空了,但它们的计数却没有置零,不知道是不是ffmpeg.c的一个bug。修复方法如下:在ffmpeg_cleanup方法下,将各个计数器置零,包括:
nb_filtergraphs
nb_output_files
nb_output_streams
nb_input_files
nb_input_streams
置零之后,重复使用ffmpeg_main方法一切正常。

③ 如何在iOS下编译librtmp

编译librtmp需要先编译openssl,因为librtmp依赖openssl

首先编译openssl:

把以下内容保存为shell脚本:

#!/bin/sh

VERSION="1.0.1h" #指明openssl的版本信息,比如下载的是openssl-1.0.1h.tar.gz那么对于就填写1.0.1h
SDKVERSION="7.1" #指明ios sdk的版本号,目前最新的是7.1,不清楚的同学可以 ls /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/ 一下看看自己的iPhoneOS7.1.sdk是不是7.1

CURRENTPATH=`pwd`
ARCHS="i386 armv7 armv7s arm64"
BUILDPATH="${CURRENTPATH}/build"
LIBPATH="${CURRENTPATH}/lib"
INCLUDEPATH="${CURRENTPATH}/include"
SRCPATH="${CURRENTPATH}/src"
LIBSSL="libssl.a"
LIBCRYPTO="libcrypto.a"
DEVELOPER=`xcode-select -print-path`

if [ ! -d "$DEVELOPER" ]; then
echo "xcode path is not set correctly $DEVELOPER does not exist (most likely because of xcode > 4.3)"
echo "run"
echo "sudo xcode-select -switch <xcode path>"
echo "for default installation:"
echo "sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer"
exit 1
fi

set -e
if [ ! -e openssl-${VERSION}.tar.gz ]; then
echo "Downloading openssl-${VERSION}.tar.gz"
curl -O http://www.openssl.org/source/openssl-${VERSION}.tar.gz
else
echo "Using openssl-${VERSION}.tar.gz"

# Remove the source directory if already exist
rm -rf "${SRCPATH}/openssl-${VERSION}"
fi

mkdir -p "${SRCPATH}"
mkdir -p "${BUILDPATH}"
mkdir -p "${LIBPATH}"
mkdir -p "${INCLUDEPATH}"

tar zxf openssl-${VERSION}.tar.gz -C "${SRCPATH}"
cd "${SRCPATH}/openssl-${VERSION}"

LIBSSL_REPO=""
LIBCRYPTO_REPO=""

for ARCH in ${ARCHS}
do
if [ "${ARCH}" == "i386" ];
then
PLATFORM="iPhoneSimulator"
else
sed -ie "s!static volatile sig_atomic_t intr_signal;!static volatile intr_signal;!" "crypto/ui/ui_openssl.c"
PLATFORM="iPhoneOS"
fi
export CROSS_TOP="${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer"
export CROSS_SDK="${PLATFORM}${SDKVERSION}.sdk"
export BUILD_TOOLS="${DEVELOPER}"

echo "Building openssl-${VERSION} for ${PLATFORM} ${SDKVERSION} ${ARCH}"
echo "Please stand by..."

export CC="${BUILD_TOOLS}/usr/bin/gcc -arch ${ARCH}"

OUTPATH="${BUILDPATH}/openssl-${PLATFORM}${SDKVERSION}-${ARCH}.sdk"
mkdir -p "${OUTPATH}"
LOG="${OUTPATH}/build-openssl-${VERSION}.log"

if [[ "$VERSION" =~ 1.0.0. ]]; then
./Configure BSD-generic32 --openssldir="${OUTPATH}" > "${LOG}" 2>&1
else
./Configure iphoneos-cross --openssldir="${OUTPATH}" > "${LOG}" 2>&1
fi

# add -isysroot to CC=
sed -ie "s!^CFLAG=!CFLAG=-isysroot ${CROSS_TOP}/Platforms/${PLATFORM}.platform/Developer/SDKs/${CROSS_SDK} -miphoneos-version-min=7.0 !" "Makefile"

make >> "${LOG}" 2>&1
make install >> "${LOG}" 2>&1
make clean >> "${LOG}" 2>&1

LIBSSL_REPO+="${OUTPATH}/lib/${LIBSSL} "
LIBCRYPTO_REPO+="${OUTPATH}/lib/${LIBCRYPTO} "
done

echo "Build library..."
lipo -create ${LIBSSL_REPO}-output ${LIBPATH}/${LIBSSL}
lipo -create ${LIBCRYPTO_REPO}-output ${LIBPATH}/${LIBCRYPTO}

cp -R ${BUILDPATH}/openssl-iPhoneSimulator${SDKVERSION}-i386.sdk/include/openssl ${INCLUDEPATH}/
echo "Building done."
echo "Cleaning up..."
rm -rf ${SRCPATH}/openssl-${VERSION}
echo "Done."

保存脚本,添加脚本的执行权限(chmod +x 脚本名称)

运行脚本
可以编译成功的,如果失败,可以以打开那个log文件,查看失败原因。

编译成功以后,把lib文件和include拷贝到你的librtmp目录(可以新建一个空得librtmp目录),在librtmp目录里面同样写一个shell脚本,脚本如下:

#!/bin/sh

SDKVERSION="7.1" #这里跟openssl的地方是一个意思

CURRENTPATH=`pwd`
ARCHS="i386 armv7 armv7s arm64"

LIBPATH="${CURRENTPATH}/lib" #这里就是刚才拷贝过来的目录,不要修改,因为librtmp最后生成的也放到了这个下面
INCLUDEPATH="${CURRENTPATH}/include" #这里就是刚才拷贝过来的目录,不要修改,因为librtmp最后生成的也放到了这个下面

LIBRTMPREPO="git://git.ffmpeg.org/rtmpmp"
BUILDPATH="${CURRENTPATH}/build"
SRCPATH="${CURRENTPATH}/src"
LIBRTMP="librtmp.a"
DEVELOPER=`xcode-select -print-path`

if [ ! -d "$DEVELOPER" ]; then
echo "xcode path is not set correctly $DEVELOPER does not exist (most likely because of xcode > 4.3)"
echo "run"
echo "sudo xcode-select -switch <xcode path>"
echo "for default installation:"
echo "sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer"
exit 1
fi

# Check whether openssl has already installed on the machine or not.
# libcrypt.a / libssl.a

set -e
echo 'Check openssl installation'
if [ -f "${LIBPATH}/libcrypto.a" ] && [ -f "${LIBPATH}/libssl.a" ] && [ -d "${INCLUDEPATH}/openssl" ]; then
echo 'Openssl for iOS has already installed, no need to install openssl'
else
echo 'Openssl for iOS not found, will install openssl for iOS'
./build-libssl.sh
echo 'Succeeded to install openssl'
fi

# Download librtmp source code from git repository
# We assuem the user already installed git client.
echo 'Clone librtmp git repository'

# Remove the directory if already exist
rm -rf "${SRCPATH}/rtmpmp"

git clone ${LIBRTMPREPO} src/rtmpmp
cd "${SRCPATH}/rtmpmp/librtmp"

LIBRTMP_REPO=""

for ARCH in ${ARCHS}
do
if [ "${ARCH}" == "i386" ];
then
PLATFORM="iPhoneSimulator"
else
PLATFORM="iPhoneOS"
fi
export CROSS_TOP="${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer"
export CROSS_SDK="${PLATFORM}${SDKVERSION}.sdk"
export BUILD_TOOLS="${DEVELOPER}"

echo "Building librtmp for ${PLATFORM} ${SDKVERSION} ${ARCH}"
echo "Please wait..."

# add arch to CC=
sed -ie "s!AR=\$(CROSS_COMPILE)ar!AR=/usr/bin/ar!" "Makefile"
sed -ie "/CC=\$(CROSS_COMPILE)gcc/d" "Makefile"
echo "CC=\$(CROSS_COMPILE)gcc -arch ${ARCH}" >> "Makefile"

export CROSS_COMPILE="${DEVELOPER}/usr/bin/"
export XCFLAGS="-isysroot ${CROSS_TOP}/SDKs/${CROSS_SDK} -miphoneos-version-min=7.0 -I${INCLUDEPATH} -arch ${ARCH}"

if [ "${ARCH}" == "i386" ];
then
export XLDFLAGS="-L${LIBPATH} -arch ${ARCH}"
else
export XLDFLAGS="-isysroot ${CROSS_TOP}/SDKs/${CROSS_SDK} -miphoneos-version-min=7.0 -L${LIBPATH} -arch ${ARCH}"
fi
OUTPATH="${BUILDPATH}/librtmp-${PLATFORM}${SDKVERSION}-${ARCH}.sdk"
mkdir -p "${OUTPATH}"
LOG="${OUTPATH}/build-librtmp.log"

make SYS=darwin >> "${LOG}" 2>&1
make SYS=darwin prefix="${OUTPATH}" install >> "${LOG}" 2>&1
make clean >> "${LOG}" 2>&1

LIBRTMP_REPO+="${OUTPATH}/lib/${LIBRTMP} "
done

echo "Build universal library..."
lipo -create ${LIBRTMP_REPO}-output ${LIBPATH}/${LIBRTMP}

mkdir -p ${INCLUDEPATH}
cp -R ${BUILDPATH}/librtmp-iPhoneSimulator${SDKVERSION}-i386.sdk/include/ ${INCLUDEPATH}/

echo "Building done."
echo "Cleaning up..."

rm -rf ${SRCPATH}/rtmpmp
echo "Done."

保存脚本

运行脚本

④ 如何使用xcodebuild在命令行编译iOS工程

、准备工作 1、jenkins环境。搭建jenkins环境可以参考jenkins平台搭建和配置一节。需要注意的是,虽然涉及iOS开发,但是jenkins平台却不必搭建在mac机器上,只要在jenkins上添加mac节点就可以了。 2、iOS开发环境。iOS开发环境主要是指Xcode开发环境,Xcode是免费的,只要在苹果应用商店里下载一个就可以了。当然,还有重要的一点儿---开发者证书,现在个人也已经有免费的证书了,没有证书的话,只能打模拟器用的包了。 3、git项目。强烈建议把代码放在git上,这样便于团队开发。当然,不放git上也可以。 4、jenkins Xcode持续集成插件。常用的插件Xcode integration,这个插件能够快速的帮助我们进行Xcode打包配置,当然,只用纯shell脚本也是可以的。 在jenkins上打包之前,我们最好手工测试一下可以打包成功,首先用Xcode图形界面进行测试,然后用命令行测试,如果都能打包成功就可以挂在jenkins上运行了,毕竟jenkins的原理也是通过执行一系列命令来完成的。 三、jenkins配置 1、创建一个任务,创建任务的时候最好选自由风格的软件项目,这样配置起来比较方便,如果有需要,也可以选择其他的风格。 2、描述

⑤ ios 怎么配置编译ffmpeg

IOS上编译ffmpeg需要先下载两个程序:iFrameExractor和ffmpeg
编译步骤:
1、在终端下: cd /iFrameExtractor/ffmpeg 建议开始就执行 sudo -s (获取权限命令)
2、在终端下输入 ./configure --prefix=/iFrameExtractor/ffmpeg --libdir=iFrameExtractor/ffmpeg/lib --enable-gpl --enable-static --disable-shared --enable-swscale --enable-zlib --enable-bzlib --disable-ffmpeg --disable-ffplay --disable-ffserver --enable-pthreads
3、执行make 这里会有一堆的编译情况。
注:最好先升级Command Line Tools,避免编译错误

4、执行make install。 (执行完后 到iFrameExtractor/ffmpeg/lib文件上去看看)
出现 libavcodec libavdevice libavformat libavutil libswscale5个.a文件
5、用xcode 打开iFrameExractor工程,确认Header Search Paths里有:"$(SRCROOT)/ffmpeg"路径。 $(SRCROOT)表示工程路径。同时可以看到iFrameExractor工程下ffmpeg文件下的.a文件都不是红色的了。

6、真机上编译(模拟器上i386,真机上是arm的,真机还分arm6 和arm7 )
以下是针对arm7的

/configure --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffserver --enable-cross-compile --arch=arm --target-os=darwin --cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc --as='gas-preprocessor/gas-preprocessor.pl /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc' -- sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk --cpu=cortex-a8 --extra-cflags='-arch armv7' --extra-ldflags='-arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk' --enable-pic
7、执行 make 和make install 就有上面的几个.a文件,至此编译结束。

⑥ 使用appium怎样写ios真机自动化测试脚本

同android一样 可以用python脚本去写脚本

⑦ ios自动化脚本工具控件识别使用的什么框架

用TC简单程序开发工具,这个是一款支持中英文编程的脚本开发工具,网络搜索下载。

⑧ 如何用python写ios的游戏脚本

可以的,如下方案二选一
1、需要Mac, ,使用xcode部署 iOS-Tagent 成功后, 之后airtest完成自动操作
2、需要ipad,因为ipad支持蓝牙鼠标,购买蓝牙鼠标模块,用python控制串口控制蓝牙鼠标模块,再通过蓝牙鼠标模块操控ipad,即可实现python操作ipad

⑨ ios 能编译动态库吗

一、创建FrameWork工程

新建工程,选择创建FrameWork工程或者静态库(Static Library)。






  • ⑩ ios自动化编译 能用于appstore吗

    基本上,每个iOS开发者都希望自己的作品,也能像小鸟一样一飞冲天,而且在排行榜里,还经常可看到国人作品的影子,但现在 App Store接近四十万个应用里面,别说成为小鸟,就算进入排行榜也是非常困难的事情。那么,怎样才能冲入排行榜呢?
    挖掘排行榜的规则
    首先,当然是要经常关注这个直白又神秘的排行榜,说它直白,是因为人人都看得见,说它神秘却是因为背后排行的规则除了苹果公司自己,无人能知。排行 榜在iOS设备或者电脑上的iTunes上都能看到:每个国家都有自己排行榜,榜单分为三个,每个榜单现在提供200个产品列表。
    这三个排行榜分别是付费应用软件排行(top paid)、免费应用软件排行(top free)以及畅销应用排行(top grossing),头两个是在App Store开张时即存在的,第三个却在差不多一年后才加上。我们可以粗浅地把这三个榜单理解为收费下载量最高、免费下载量最高,以及收入最高,但是事实要 比这复杂许多。如果对榜单进行一段时间的观测,保持每半个小时刷新一下,我们可以发现榜单正在不停地变化。那么是这半个小时之内的下载量的改变造成了榜单 的变化吗?我们无从得知,关于排名的规则,苹果公司一直在调整,曾经有人推算过,据称和几天之内的下载量、增量等都有关系。而在今年四月,排行榜的异动又 让人猜测是否是苹果加大了用户活跃度所占的比重。这一切都是推测,但无论如何,我们能看到苹果正在无形中要求开发者做出更优秀的产品。
    成功打榜的策略
    那么如果开发者在对排行榜进行了充分的分析,决定了产品的开发方向,又经过卓越的努力做出了一款优秀的产品后,怎样才能让自己的产品打入排行榜呢? 首先,最直接有效的方法就是能够被苹果编辑推荐,进入了推荐榜(北京时间每周五推荐一次)后,就会有更多机会冲击排行榜。去年,来自上海coconuts island公司的产品finger balance就因为被推荐而一举冲到了top paid 6。至于怎样才能够上推荐,我请教过苹果的全球开发者关系负责人,他的回答很简单:“优秀的作品!”每周能得到推荐的产品个数毕竟有限,而且即便得到了推荐,所在推荐位也会影响冲榜的效率。举例来说,同样是游戏,进入首页推荐的话,就比进入游戏推荐更有机会;同样是首页推荐,排在前面的自然也比排在后面的 有更多的曝光机会。可惜无论能否被推荐,以及获得推荐后的位置,都是我们这些开发者完全无法控制和预测的,这也是很多开发者把推荐榜变更的这天称之为“神奇周五”的原因。每周,苹果都通过这种方式对于优秀的产品给予足够的曝光,而因此进入排行榜的例子也比比皆是。一旦获得推荐,为了增加冲榜的成功率,将产品的价格暂时调低也是一种很有效的方式。但是如果发现即便降价也冲榜无力,为了利润最大化可以将价格改回去,因为上推荐这一周,往往是开发者收入最高的一 周。曾经“上推荐”这件事的效果可以维持一个月,但随着产品越来越多,苹果会将周期大大缩短,苹果一直在调整相关的策略,作为开发者,最好的选择就是接受 变化,适应变化。
    如果因为运气不好等原因,没有得到苹果公司编辑的垂青,就需要动用推广的方式来增加产品的曝光度了。根据多家数据分析公司的统计,直接在iOS设备上进行购买行为的占到全部用户的90%以上,因此推广方式也应集中在针对iOS设备的服务为主,至于Web广告、利用公关公司等手段,对于小工作室来说并不建议,基本上会导致入不敷出。
    最简单的对收费产品的推广方式,就是做一个功能有限的免费版。
    早在2009年,来自香港epicforce公司的传奇作品ifighter,就凭借冲到过top free 1的免费版,将收费版推到最高top paid 2的位置,创造出国人开发者的一个神话。所以免费版是无论如何都要做的,至于是在收费版上线之前、之后,还是同时推出,并没有一定之规,开发者可以根据实 际情况来决定。免费版的设计要点在于恰到好处地勾起用户的兴趣。还以ifighter为例,正式版本有四个关卡,而免费版只有一个关卡,但效果非常之好。 如果免费版给出三关,就会有用户觉得只为一关付费不值当;同样道理,如果免费版只有第一个关卡的前面部分,用户还没有感觉到游戏的乐趣时就结束,也是不恰 当的。
    因为几乎所有人都意识到免费版的重要性,所以免费应用软件排行的竞争也是异常激烈的。美国top free 第一名(iPhone)的日下载量要超过十万,iPad的日下载量超过两万,中国top free 第一名(iPhone)的日下载量五万,iPad的日下载量也是两万多(是的,中国iPad的保有量和美国相当),所以尽管是免费产品,但要想达到大规模 的下载量,有时也需要花广告费,才能将产品推到更好的位置。而且,免费榜里面参与竞争的不仅仅是免费版,经常会有收费产品的限时免费版来凑热闹。
    有些开发者不理解,为什么要收费转免费?他们认为这会减少潜在用户。其实这个顾虑完全没有必要,即便是第一名每天过十万的下载,对于苹果庞大的用户 群来说,也不过是九牛一毛。基本上,如果收费产品免费后,能进入top free比较靠前的位置的,转回收费后,都能有不错的成绩。几乎每周都能看到有产品通过这种方式,重新杀回收费排行榜的。这里面要注意的地方是,免费的时 间绝不能短,如果只有几个小时就匆匆忙忙改回去,是完全没效果的,只要产品还在排行榜上不断爬升,就不要停止,越多的人看到并下载你的产品,口碑传播的效 果就越好,当然也不能无限制地免费下去,基本上三天至一周是比较合适的时间。修改价格后,会有很多网站收录价格变化的消息,因为被很多用户得知,也因此催 生了一些专门做相关推广的公司。国内,做得比较好的是iapps.im和ewtang.com,如果想在国内冲击免费榜的,可以和这两家联系。
    回到免费版上来,免费版长期占据免费榜,就基本上能保证收费版长期占据收费榜,这是App Store里最健康的生存模式,但是即便在产品发布时,免费版进入了排行榜,如果希望能长期留存在榜单里面,有时候会需要采用购买广告的方式。目前提供这 种服务的公司有很多,苹果自己的iAd也在其中,另外比较有名的就是AdMob了,他们提供的服务都是根据一个用户的点击合多少钱来计算的,换算到下载, 可能一个有效的免费版下载要一美元甚至更多。这就需要开发者在考虑自己产品的ARPU之后来决定是否要进行广告投放。这里面有一个误区,投放广告的主要目 的不是立刻把广告费用赚回来,而是将产品推到排行榜一个比较不错的位置,让下载进入良性循环,以获得更多的曝光。如果产品推到高位后一旦广告投放停止迅速 下滑,就说明产品本身还是存在一定的问题,是修改后继续推广,还是干脆放弃进行新的产品开发就要开发者自行判断了。需要强调的一点是,有时候产品制作得很 不错,但是图标、名字、截图,以及描述这些所谓的“表面功夫”不到位,也会影响用户的下载欲望,毕竟很多用户是冲动型下载,如果上述几个部分有瑕疵,在选 择面非常大的前提下,用户可能就选择其他产品了,这种情况并不少见,所以请开发者一定要注意。
    另外一种比较有效的方式,就是系列化产品之间的相互推广。空中网的僵尸危机系列已经出了三部曲,四月份刚通过序章免费的方式,将一代顺利推入了 top paid 100。这种方式也可以用在同样类型的产品上,比如美国的chop chop系列,经常免费其中一个来推广其他作品,效果还不错。这种方式能成功的原因很简单,用户免费获得其中一个产品,觉得很好的话,自然会认为另一个同 系列或者同类型产品也会优秀,于是产生了付费意愿。
    免费榜单的竞争,多少有规律可寻,收费榜单的竞争,单靠广告模式就比较难了,上面提到一个免费下载的花费可能是一美元以上,而用同样的广告资源,一个收费版下载的花费可能要贵十倍都不止,所以相对来说,进行免费版本的推广会更加有效。

    热点内容
    搭建一个流媒体服务器 发布:2024-05-05 20:40:59 浏览:665
    2017中超数据库 发布:2024-05-05 20:37:25 浏览:377
    编程包游戏 发布:2024-05-05 20:25:00 浏览:607
    系统锁屏忘记密码如何设置 发布:2024-05-05 20:18:07 浏览:759
    xp怎样访问win7 发布:2024-05-05 20:17:07 浏览:870
    c语言访问http 发布:2024-05-05 20:04:14 浏览:874
    什么可以配置波尔多叶 发布:2024-05-05 20:00:32 浏览:964
    cgxrar解压密码 发布:2024-05-05 19:47:24 浏览:634
    ubuntu编译linux内核 发布:2024-05-05 19:46:05 浏览:8
    php静态方法调用对象 发布:2024-05-05 19:24:30 浏览:367