【0秋产品笔记】产品生命周期的六单级次

cocoapods系列教程—安装及使用
cocoapods系列教程—Podfile文件
cocoapods系列教程—Podfile.lock文件 和 Spec
Repo
cocoapods系列教程—spec文件
cocoapods系列教程—原理篇
cocoapods系列教程—让自己的开源框架支持cocoapods
cocoapods系列教程—模块化设计
cocoapods系列教程—创建私有pods

一个出品都见面经历六独号:启动→ 拉新→促活跃→营收→留存→流失

脚介绍spec文件的详细设置.基本上是依据官网翻译过来的,有什么尴尬还望指点

1. (冷)启动

  • name

在关新之前的等我们成为(冷)启动,是一个筹备期。冷启动为急需用户的,需要用户反馈及验证产品是否满足该中心需求,产品是否好用,这时候运营就需开介入了。冷启动的用户吸引,我们为叫“破冰”,破冰阶段种子用户的抓取并非易事。

冷启动阶段的子用户就经一样步一步的积,这丛种子用户就是她们感兴趣以及爱而集中在一块儿的社群,论坛,微信QQ群等,在特定的渠道找寻子用户。

spec.name = 'AFNetworking'

另外种子用户以及骨干用户是发分,种子用户仅是为印证产品趋势和用户体验最好早的等同批用户,主要及验证的目的。而基本用户是凭经一定之积攒,对活保持得忠诚度,有展现营收潜力的一模一样批判用户。

  • 版本

2. 拉新

关新路便需要开市场+BD渠道+运营多无齐下操作了。

spec.version = '0.0.1'

这边产生少数独至关重要指标是流量入口以及目标转向

  • 支持的cocoapods的版本

流量入口指用户流量都是经哪些渠道上,而目标转向则靠现实的如注册率,下单率等。需要组合总成本计算出单个用户的目标转向价格会再次好地评估何种渠道拖累新能实现最深程度之低收入。

3. 促活跃

spec.cocoapods_version = '>= 0.36'

外产品都来活跃度(使用频次)消退期,这时候需要来把运营的爆点来祛除一些用户之疲劳感。促活体系要拿产品设计和营业精细化结合起来。

  • 布信息,根据个人需要填

对象人群+奖励+任务(即场景):

用户以什么状况下,完成什么任务;这个任务之装置也同我们平台运营要达的对象相统一;

spec.xcconfig = { 'HEADER_SEARCH_PATHS' => '$(SDKROOT)/usr/include/libxml2' }

spec.xcconfig = { 'FRAMEWORK_SEARCH_PATHS' => '"
$(SRCROOT)/libs/Frameworks/Huoyan"' }   

spec.xcconfig  = { 'LIBRARY_SEARCH_PATHS' => '"$(PODS_ROOT)/iOS_Util/iOS_Util/AMR/lib"' }

spec.xcconfig  = { "HEADER_SEARCH_PATHS" => "${PODS_ROOT}/boost" }

方便刺激:

  • 作者信息

动感及之奖赏:如生日特权,会员勋章;

质及的褒奖:如签到奖励,注册后送红包,返利或优惠券等嘉奖;

spec.author = 'Darth Vader'

4. 营收

若有差不多个作者,可以如此写

营收关注付费渗透率和ARPU值。

spec.authors = 'Darth Vader', 'Wookiee'

spec.authors = { 'Darth Vader' => 'darthvader@darkside.com',
                 'Wookiee'     => 'wookiee@aggrrttaaggrrt.com' }

付费渗透率靠一个大盘的人流遭受生出百分之多少的用户是会或有意愿付费的,即总用户数*付费转化%;

  • 多媒体地址,如果地方是twitter,发布版会时有发生通

APRU值虽因每个用户平均对于产品之付费金额,电商业常称之为客单价。

5. 留存和扭转

spec.social_media_url = 'https://twitter.com/cocoapods'

spec.social_media_url = 'https://groups.google.com/forum/#!forum/cocoapods'

除去就活跃外,还欲拿这些外向用户转化成为基本用户,成为忠实用户,长久的留下来。这时候用户成长体系就见其重要性了。

  • 准,一般MIT,默认与spec文件于一如既往目录下

有外向用户,就必定会起用户放弃、厌倦我们的成品,我们就用定义这些没有用户的性状以及去的缘由。哪些问题是那时候我们没有办好的假设离开,现在咱们早已改善,甚至略超预期的地方,需要教育他们,循序善诱的导,而如何用户是早已绝望抛弃了咱,我们只好舍这有用户的。

以我们解析好立波用户特性以及没有原因后,可以生若干小策略设置召回陷阱,如定向推送些优惠券与惠及为那归来看望,并使用短信、EDM、微信、APP消息中心等于渠道来触达到已经闹消退预警的用户。

spec.license = 'MIT'

6. 流失

  • 点名许可文件

流失期是产品人都非思见到底,但是每个产品还不可避免会遇见流失期,每个产品都见面遇见这路。我们的活还见面赶上吃竞品收购、兼并,被用户抛弃,或让行业淘汰等状况,这个时节咱们啊应做好用户告知、安抚及延续安排应本着工作。一来是吃用户对咱商家品牌、产品团队来个善始善终的好印象,同时为为继续新产品之出做好衔接、导流的行事。

以上~

spec.license = { :type => 'MIT', :file => 'MIT-LICENSE.txt' }

点名许可文件之始末

spec.license = { :type => 'MIT', :text => <<-LICENSE
                   Copyright 2012
                   Permission is granted to...
                 LICENSE
               }
  • 项目主页

spec.homepage = 'http://www.example.com'
  • 品种git地址,tag值与spec.verison版本一样

spec.source = { :git => 'https://github.com/AFNetworking/AFNetworking.git',
                :tag => spec.version.to_s }

色git地址,tag值以v开头,支持子模块(子模块是git的子模块)

spec.source = { :git => 'https://github.com/typhoon-framework/Typhoon.git',
                :tag => "v#{spec.version}", :submodules => true }

项目svn地址

spec.source = { :svn => 'http://svn.code.sf.net/p/polyclipping/code', :tag => '4.8.8' }

类压缩包地址

spec.source = { :http => 'http://dev.wechatapp.com/download/sdk/WeChat_SDK_iOS_en.zip' }

指定压缩包地址,并校验hash值,支持sha1 和 sha256

spec.source = { :http => 'http://dev.wechatapp.com/download/sdk/WeChat_SDK_iOS_en.zip',
                :sha1 => '7e21857fe11a511f472cfd7cfa2d979bd7ab7d96' }

点名为地方地址

podspec :path => '/Documents/PrettyKit/PrettyKit.podspec'
  • 简介

spec.summary = 'Computes the meaning of life.'
  • 详细描述

spec.description = <<-DESC

                   这里写描述内容

                   DESC
  • 单个截图

spec.screenshot  = 'http://dl.dropbox.com/u/378729/MBProgressHUD/1.png'
  • 差不多单截图

spec.screenshots = [ 'http://dl.dropbox.com/u/378729/MBProgressHUD/1.png',
                     'http://dl.dropbox.com/u/378729/MBProgressHUD/2.png' ]
  • 文档说明

spec.documentation_url = 'http://www.example.com/docs.html'
  • prepare_command,在pod文件下充斥了之后,执行的吩咐,原文如下

A bash script that will be executed after the Pod is downloaded. This command can be used to create, delete and modify any file downloaded and will be ran before any paths for other file attributes of the specification are collected.

This command is executed before the Pod is cleaned and before the Pods project is created. The working directory is the root of the Pod.

If the pod is installed with the :path option this command will not be executed.

单个命令

spec.prepare_command = 'ruby build_files.rb'

基本上条命令

spec.prepare_command = <<-CMD
                        sed -i 's/MyNameSpacedHeader/Header/g' ./**/*.h
                        sed -i 's/MyNameOtherSpacedHeader/OtherHeader/g' ./**/*.h
                   CMD
  • 是不是过期

spec.deprecated = true
  • 支撑之平台,如果无写默认支持具有平台

spec.platform = :ios //仅支持ios

支撑多个阳台

spec.ios.deployment_target = '6.0'

spec.osx.deployment_target = '10.8'
  • 仰的老三在

spec.dependency 'AFNetworking', '~> 1.0'

指定某个平台的指

spec.ios.dependency 'MBProgressHUD', '~> 0.5'
  • 是不是是ARC,默认true,如果未是,会自动抬高-fno-objc-arc compiler flag

spec.requires_arc = true

部分是ARC

spec.requires_arc = false
spec.requires_arc = 'Classes/Arc'   //该文件夹下是ARC,其它非ARC
spec.requires_arc = ['Classes/*ARC.m', 'Classes/ARC.mm']
  • 赖的系的框架

spec.ios.framework = 'CFNetwork'

大抵独framework,用逗号分开

spec.frameworks = 'QuartzCore', 'CoreData'
  • weak_frameworks
    只要当大版本的OS中调用新增的功力,并且以亚版本的OS中仍然能够运转,那么就要用到weak_frameworks.如果引用的一些类或接口在亚版本中并无支持,对于不支持的接口,可以于运行的时段判断,这样程序不见面拧,如果无weak引用,程序于低版本下启动之时刻即便会见崩溃掉

spec.weak_framework = 'MessageUI'
  • libraries 比如libz,sqlite3.0等,多只用逗号分开

spec.libraries = 'xml2', 'z'  //z表示libz.tdb,后缀不需要,lib开头的省略lib
  • compiler_flags

spec.compiler_flags = '-DOS_OBJECT_USE_OBJC=0', '-Wno-format'
  • prefix_header_contents 类似于pch,文件,多个用逗号隔开

spec.prefix_header_contents = '#import <UIKit/UIKit.h>', '#import <Foundation/Foundation.h>'

啊足以这样写:

s.prefix_header_contents = <<-EOS
 #ifdef __OBJC__
 #import "SGExtension.h"    //SGExtension包含了所有头文件
 #endif 
EOS
end
  • 指定pch文件

spec.prefix_header_file = 'iphone/include/prefix.pch'
  • 源文件

spec.source_files = 'Classes/**/*.{h,m}'
spec.source_files = 'Classes/**/*.{h,m}', 'More_Classes/**/*.{h,m}'
  • 文本匹配
    • *配合有文件
    • c*相当以名字C开头的文件
    • *c配合为名字c结尾的文本
    • *c*匹配有名字包含c的文件
    • **文本夹和递归子文件夹
    • ?轻易一个字符(注意是一个字符)
    • [set] 匹配多独字符,支持取反
    • {p,q} 匹配名字包括p 或者 q的文书

例子:

"JSONKit.?"    #=> ["JSONKit.h", "JSONKit.m"]   //JSONKit.字符
"*.[a-z][a-z]" #=> ["CHANGELOG.md", "README.md"]//.两个a-z的字母
"*.[^m]*"      #=> ["JSONKit.h"]                //.不是m的字符
"*.{h,m}"      #=> ["JSONKit.h", "JSONKit.m"]   //包含.h或者.m
"*"            #=> ["CHANGELOG.md", "JSONKit.h", "JSONKit.m", "README.md"]//所有文件
  • 公有头文件

spec.public_header_files = 'Headers/Public/*.h'
  • 私有头文件

spec.private_header_files = 'Headers/Private/*.h'
  • 团结的要第三正值framework,比qqSDK的TencentOpenAPI.framework

spec.vendored_frameworks = 'MyFramework.framework','TheirFramework.framework'
  • 祥和之或第三方.a文件,比如微信SDK的.a文件

spec.vendored_libraries = 'libProj4.a', 'libJavaScriptCore.a'
  • 资源文件,比如图片

spec.ios.resource_bundle = { 'MapBox' => 'MapView/Map/Resources/*.png' }

多个路径        
spec.resource_bundles = {
    'MapBox' => ['MapView/Map/Resources/*.png'],
    'OtherResources' => ['MapView/Map/OtherResources/*.png']
  }

这种办法资源文件会为以bundle的花样进入到项目遭到失,官方建议采取的方法,主要是谨防和用户的命名方式冲突

  • 资源文件另一样栽方法,这种比广泛

spec.resource = 'Resources/HockeySDK.bundle'
spec.resources = ['Images/*.png', 'Sounds/*']