<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>非鱼观点-互联网观察 &#187; 收费程序</title>
	<atom:link href="http://www.unfish.net/archives/tag/%e6%94%b6%e8%b4%b9%e7%a8%8b%e5%ba%8f/feed" rel="self" type="application/rss+xml" />
	<link>http://www.unfish.net</link>
	<description>if(I&#039;m awake){I&#039;m writing code;}else{I&#039;m ready to write code;}</description>
	<lastBuildDate>Mon, 12 Jul 2010 13:16:06 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>IPhone程序发布到应用程序商店的流程</title>
		<link>http://www.unfish.net/archives/473-20090606.html</link>
		<comments>http://www.unfish.net/archives/473-20090606.html#comments</comments>
		<pubDate>Sat, 06 Jun 2009 06:38:28 +0000</pubDate>
		<dc:creator>非鱼</dc:creator>
				<category><![CDATA[IPhone]]></category>
		<category><![CDATA[技术文章]]></category>
		<category><![CDATA[App Store]]></category>
		<category><![CDATA[IPhone程序开发]]></category>
		<category><![CDATA[应用程序商店]]></category>
		<category><![CDATA[收费程序]]></category>

		<guid isPermaLink="false">http://www.unfish.net/archives/473-20090606.html</guid>
		<description><![CDATA[用传真机试过N次，又用faxzero试过N次以后，全部都提示失败。但是，世事如此难料，今天凌晨收到了信用卡境外消费99美元的短信提醒，早上起来信箱里就已经收到了激活码，点击链接就激活了自己的开发者账号。也不知道是哪一次传真发成功了。
登录开发者中心，右侧有个Portal的链接，点击进去就是自己账号的管理中心，初次进入有个向导，可以帮你创建一个开发者证书。最好是下载它的完整的向导说明书，是一个PDF，7M多，步骤还是挺详细的。但是这本手册在网上没有见过中文版的说明，所以在这里简单介绍一下。
这个开发者中心的用户权限分三种类型：Agent，Admin，Developer。Agent拥有完整的管理权限，Admin也可以管理用户和证书，Developer只能管理自己的证书和设备。只有Agent有上传软件到App Store的权利。（但是我没有看到添加其它用户的功能，可能需要299美元的账号类型才会有，我自己的账号登录进来就是个Agent了）。
对于个人开发者，你需要完成以下几个过程：
申请一个Development证书 &#62; 设置你的IPhone手机 &#62; 创建一个App ID &#62; 创建并下载安装一个Development Provisioning Profile。经过这几步，你写的程序就可以跑在自己的手机上了（否则只能在虚拟机里面运行）。
然后申请一个Distribution证书 &#62; 创建并安装一个Distribution Provisioning Profile &#62; 编译你的程序 &#62; 就可以发布到App Store了。

下面详细介绍一下：（不知道有没有必要，毕竟买了证书的人都可以下载到这篇很简单的英文文档），所有的介绍以中文版的Mac OS X的菜单和程序名为准
开发者证书安装步骤：
打开应用程序中的“钥匙串访问”，在菜单里点击“证书助理”下面的“从证书代理请求证书”，注意下面不要选中任何行，否则菜单会变。输入自己的注册Email，常用名称可以写详细一点，比如“Unfish Dev Key”，下面选中“存储到磁盘”，点继续，可能会出现未知错误，多试几次就OK了。然后在浏览器中进入开发者中心的Certificaties导航页面，在Development页面中最下面选择刚才创建的证书文件，点上传。然后证书就会显示出来，还要再点一下后面的Approve按钮，页面刷新后这个证书就可以下载了。下来是个cer文件，双击会自动导入，导入类型选择“登录”就可以。
然后是添加自己的手机设备到xcode。把手机连到电脑上，在xcode的windows菜单下打开Organizer，左边的devices下面会列出你的手机，右边的Identifier项就是你的手机的udid，复制下来，待会要用。如果这个手机还没有设置过作为开发机，这个界面上应该会有两个按钮，点一下就可以把它设为开发机，在xcode里点Build and go的时候就可以自动的安装你的程序到手机上，不需要通过ITunes了。在开发者中心的左边Devices导航页里点Add Device，起个自己认识的名字，把udid粘贴进去就可以了。（这一步只是开发证书有用，发布证书是不需要这个东西的。）
然后需要创建一个App ID，在开发者中心的App IDs导航页创建一个新的App ID，这个App ID需要跟程序的info.plist里面定义的程序Identifier相对应，如果这里只输入一个*，那么info.plist那里写什么都可以，建议用*。
然后进入开发者中心的Provisioning菜单，在Development页面创建一个新的Provisioning，需要选择所使用的证书，App ID，和对应的设备，生成以后下载这个provisioning文件，把下载下来的文件拖到Dock上的Xcode的图标上就会自动安装进去。然后退出xcode重新打开，打开你的项目，打开Project菜单下面的Edit Project Settings，进入Build页面，找到下面的Code Signing Identity，把Any iPhone OS Device项后面选中你的开发者证书，然后就可以把项目的编译目标设为Device（而不是模拟器），试一下Build and Go了。程序应该会编译完并自动安装到你的手机上，并自动启动了。
发布证书安装步骤：
再使用钥匙串访问里面的“从证书代理请求证书”功能，输入自己的Email，名称要写购买证书时登录的公司名或者个人名，下面选中“保存到磁盘”和“让我自己选择私钥”，下一步，把证书保存下来。
进入开发者中心Certificates里面的Distribution页面，选择前面保存的文件上传，然后Approve一下，下载这个证书，双击导入，类型选登录。
进入开心者中心Provisioning里面的Distribution页面，添加新的Provisioning，类型选App Store，（如果选了Ad Hoc，就只有你添加过udid的手机才能安装这个程序了），证书应该是自动出现的，App ID选好，创建完成，下载这个文件，拖到xcode的图标上安装完成。退出xcode再重新打开，否则加载不了你刚刚添加的那个证书，会出现Provisioning无效的提示。
然后打开你的项目，进入“Edit Project Settings”，进入Configuration页面，选中Release点击下面的Duplicate，复制一个新的配置项出来，命名为Distribution。然后进入Build页面，顶上的Configuration下拉框选中Distribution，下面的Code Signing Identity里面的Any iPhone OS Device后面对应的值选中你的那个Distribution的证书。然后就可以编译程序了。
如果你之前按照类似这个教程http://www.weiphone.com/thread-222380-1-3.html自己生成过证书并且改过Project Settings和info.plist，需要把这两个地方改回去，否则编译的时候会出现一个warning，CodeSign warning: provisioning is [...]]]></description>
			<content:encoded><![CDATA[<p>用传真机试过N次，又用faxzero试过N次以后，全部都提示失败。但是，世事如此难料，今天凌晨收到了信用卡境外消费99美元的短信提醒，早上起来信箱里就已经收到了激活码，点击链接就激活了自己的开发者账号。也不知道是哪一次传真发成功了。</p>
<p>登录开发者中心，右侧有个Portal的链接，点击进去就是自己账号的管理中心，初次进入有个向导，可以帮你创建一个开发者证书。最好是下载它的完整的向导说明书，是一个PDF，7M多，步骤还是挺详细的。但是这本手册在网上没有见过中文版的说明，所以在这里简单介绍一下。</p>
<p>这个开发者中心的用户权限分三种类型：Agent，Admin，Developer。Agent拥有完整的管理权限，Admin也可以管理用户和证书，Developer只能管理自己的证书和设备。只有Agent有上传软件到App Store的权利。（但是我没有看到添加其它用户的功能，可能需要299美元的账号类型才会有，我自己的账号登录进来就是个Agent了）。</p>
<p>对于个人开发者，你需要完成以下几个过程：</p>
<p>申请一个Development证书 &gt; 设置你的IPhone手机 &gt; 创建一个App ID &gt; 创建并下载安装一个Development Provisioning Profile。经过这几步，你写的程序就可以跑在自己的手机上了（否则只能在虚拟机里面运行）。</p>
<p>然后申请一个Distribution证书 &gt; 创建并安装一个Distribution Provisioning Profile &gt; 编译你的程序 &gt; 就可以发布到App Store了。</p>
<p><span id="more-473"></span></p>
<p>下面详细介绍一下：（不知道有没有必要，毕竟买了证书的人都可以下载到这篇很简单的英文文档），所有的介绍以中文版的Mac OS X的菜单和程序名为准</p>
<p><strong>开发者证书安装步骤：</strong></p>
<p>打开应用程序中的“钥匙串访问”，在菜单里点击“证书助理”下面的“从证书代理请求证书”，注意下面不要选中任何行，否则菜单会变。输入自己的注册Email，常用名称可以写详细一点，比如“Unfish Dev Key”，下面选中“存储到磁盘”，点继续，可能会出现未知错误，多试几次就OK了。然后在浏览器中进入开发者中心的Certificaties导航页面，在Development页面中最下面选择刚才创建的证书文件，点上传。然后证书就会显示出来，还要再点一下后面的Approve按钮，页面刷新后这个证书就可以下载了。下来是个cer文件，双击会自动导入，导入类型选择“登录”就可以。</p>
<p>然后是添加自己的手机设备到xcode。把手机连到电脑上，在xcode的windows菜单下打开Organizer，左边的devices下面会列出你的手机，右边的Identifier项就是你的手机的udid，复制下来，待会要用。如果这个手机还没有设置过作为开发机，这个界面上应该会有两个按钮，点一下就可以把它设为开发机，在xcode里点Build and go的时候就可以自动的安装你的程序到手机上，不需要通过ITunes了。在开发者中心的左边Devices导航页里点Add Device，起个自己认识的名字，把udid粘贴进去就可以了。（这一步只是开发证书有用，发布证书是不需要这个东西的。）</p>
<p>然后需要创建一个App ID，在开发者中心的App IDs导航页创建一个新的App ID，这个App ID需要跟程序的info.plist里面定义的程序Identifier相对应，如果这里只输入一个*，那么info.plist那里写什么都可以，建议用*。</p>
<p>然后进入开发者中心的Provisioning菜单，在Development页面创建一个新的Provisioning，需要选择所使用的证书，App ID，和对应的设备，生成以后下载这个provisioning文件，把下载下来的文件拖到Dock上的Xcode的图标上就会自动安装进去。然后退出xcode重新打开，打开你的项目，打开Project菜单下面的Edit Project Settings，进入Build页面，找到下面的Code Signing Identity，把Any iPhone OS Device项后面选中你的开发者证书，然后就可以把项目的编译目标设为Device（而不是模拟器），试一下Build and Go了。程序应该会编译完并自动安装到你的手机上，并自动启动了。</p>
<p><strong>发布证书安装步骤：</strong></p>
<p><span style="text-decoration: line-through;">再使用钥匙串访问里面的“从证书代理请求证书”功能，输入自己的Email，名称要写购买证书时登录的公司名或者个人名，下面选中“保存到磁盘”和“让我自己选择私钥”，下一步，把证书保存下来。</span></p>
<p>进入开发者中心Certificates里面的Distribution页面，选择前面保存的文件上传，然后Approve一下，下载这个证书，双击导入，类型选登录。</p>
<p>进入开心者中心Provisioning里面的Distribution页面，添加新的Provisioning，类型选App Store，（如果选了Ad Hoc，就只有你添加过udid的手机才能安装这个程序了），证书应该是自动出现的，App ID选好，创建完成，下载这个文件，拖到xcode的图标上安装完成。退出xcode再重新打开，否则加载不了你刚刚添加的那个证书，会出现Provisioning无效的提示。</p>
<p>然后打开你的项目，进入“Edit Project Settings”，进入Configuration页面，选中Release点击下面的Duplicate，复制一个新的配置项出来，命名为Distribution。然后进入Build页面，顶上的Configuration下拉框选中Distribution，下面的Code Signing Identity里面的Any iPhone OS Device后面对应的值选中你的那个Distribution的证书。然后就可以编译程序了。</p>
<p>如果你之前按照类似这个教程<a title="http://www.weiphone.com/thread-222380-1-3.html" href="http://www.weiphone.com/thread-222380-1-3.html">http://www.weiphone.com/thread-222380-1-3.html</a>自己生成过证书并且改过Project Settings和info.plist，需要把这两个地方改回去，否则编译的时候会出现一个warning，CodeSign warning: <em>provisioning is not applicable for product type</em> &#8216;<em>Application</em>&#8216; in SDK &#8216;Device &#8211; iPhone OS 2.2&#8242;。删掉Project Setting里面的PROVISIONING_PROFILE_ALLOWED = NO和PROVISIONING_PROFILE_REQUIRED = NO，以及info.plist的SignerIdentity，再编译，应该就不会出错了。</p>
<p>程序发布到应用程序商店的步骤：</p>
<p>在开发者中心的Distribution导航里面的App Store页面，在下面的App Store下面的Learn More展开，就可以看到Go to iTunes Connect的链接。进入以后点击Manage My Application，就可以添加自己的程序了。</p>
<p>需要选择程序的语言，国家，介绍等等基本信息，然后下一步上传程序和其它图片。这个地方上传的程序，就是把你的项目编译以后生成的那个.app的目录直接压缩成zip上传，（这个.app目录里面的任何文件都不可以更改，否则签名就不对了）。你需要准备一张512&#215;512的png图片作为大Logo，还需要准备5张程序运行的界面截图，在这个页面上挨个选Choose file，再点击upload file，出现对号就没问题了。然后选择程序的价格，默认有很多可以选，free是免费，1是0.99美元，2是1.99美元，诸如此类。如果非免费程序，你还得准备一份购买协议。</p>
<p>再点下一步，就可以等待程序审核了。</p>
<p>感觉似乎很复杂，不过只要按教程上的步骤一步一步的做，肯定是没有问题的。</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.unfish.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.unfish.net/archives/473-20090606.html/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>看苹果公司的商业行为</title>
		<link>http://www.unfish.net/archives/472-20090605.html</link>
		<comments>http://www.unfish.net/archives/472-20090605.html#comments</comments>
		<pubDate>Fri, 05 Jun 2009 15:04:46 +0000</pubDate>
		<dc:creator>非鱼</dc:creator>
				<category><![CDATA[业界动态]]></category>
		<category><![CDATA[App Store]]></category>
		<category><![CDATA[IPhone程序开发]]></category>
		<category><![CDATA[应用程序商店]]></category>
		<category><![CDATA[收费程序]]></category>

		<guid isPermaLink="false">http://www.unfish.net/archives/472-20090605.html</guid>
		<description><![CDATA[Apple这个公司，实在是个很会赚钱的公司。一部硬件性能一般般的IPhone手机，两年多就出了两个样式，卖的还挺火，更神奇的是，电信运营商还得跟他分成，不但卖手机，连话费他都能赚一份。而更加夸张的是，作为一个依赖于开发人员的系统平台公司，Apple对待开发人员却是极其的苛刻。首先你要买个99美元的开发者账号，才有可能把你的程序放到它的App Store里去卖钱。所以不管你的软件有没有可能卖出去，苹果先赚一笔。软件放上去以后，需要经过苹果的审核，涉及系统级的程序，比如短信类的，电话类的，浏览器类的，视频播放器类的，一率不给通过审核。假如运气好，通过了，你每卖一份软件，苹果还抽成30%。
即便如此，由于互联网那些因为在App Store里面放一两个小游戏而一夜暴富的传奇故事还是刺激着越来越多的开发者想尽办法加入这个团队，而苹果，显然没有准备好迎接这么庞大的开发者队伍，所以，服务就出了点问题。
在开发者网站上申请账号，选择99美元的版本，一步一步下去，到最后提示，您所在的地区没有在线App Store业务，不能网上付款购买，需要打印并填写一张申请表格，然后传真到1(408)8627602。很郁闷。然后打印了那个表格，写上自己的信用卡号和签名（怕怕），传真……这个号码居然一直无人接听。两天打了七八次，全部都是无人接听。上网一搜，在Apple的官方开发者支持论坛上半年来不停的有人报怨这个传真的问题，至今无人解决，能不能传真成功全凭个人人品。
后来找到了一个在线的免费发美国传真的服务网站，于是又用数码相机把申请表变成图片，放到word文件里，通过这个网站上传。两天之内又在不同的时间试了四五次，每次这个网站都会自动重试五次，依然没有一次发送成功。话说回来，即便发送成功了，还要等待财务的处理流程，信用卡能否成功支付美元还不知道。支付成功了还得转到账号管理部开通账户，然后自己在线制作证书下载下来编译到程序里，上传程序还要等待审核，能不能审核成功还不知道。审核成功了放出去，有没有人买还不知道……
苹果天天都在宣扬自己的App Store里的4万个游戏和软件，还有那10亿次下载，但是却将如此多的问题视而不见。可能苹果公司并不太关心美国以外的地区，无论是那里的手机客户还是那里的开发人员，总感觉苹果就像一个很容易满足的小老板，饭不在多，吃饱就行，够吃了，就不考虑再赚多赚少的问题了。可能服务小众更容易保持自己的利润率，尽管利润量会小一些。
]]></description>
			<content:encoded><![CDATA[<p>Apple这个公司，实在是个很会赚钱的公司。一部硬件性能一般般的IPhone手机，两年多就出了两个样式，卖的还挺火，更神奇的是，电信运营商还得跟他分成，不但卖手机，连话费他都能赚一份。而更加夸张的是，作为一个依赖于开发人员的系统平台公司，Apple对待开发人员却是极其的苛刻。首先你要买个99美元的开发者账号，才有可能把你的程序放到它的App Store里去卖钱。所以不管你的软件有没有可能卖出去，苹果先赚一笔。软件放上去以后，需要经过苹果的审核，涉及系统级的程序，比如短信类的，电话类的，浏览器类的，视频播放器类的，一率不给通过审核。假如运气好，通过了，你每卖一份软件，苹果还抽成30%。</p>
<p>即便如此，由于互联网那些因为在App Store里面放一两个小游戏而一夜暴富的传奇故事还是刺激着越来越多的开发者想尽办法加入这个团队，而苹果，显然没有准备好迎接这么庞大的开发者队伍，所以，服务就出了点问题。</p>
<p>在开发者网站上申请账号，选择99美元的版本，一步一步下去，到最后提示，您所在的地区没有在线App Store业务，不能网上付款购买，需要打印并填写一张申请表格，然后传真到1(408)8627602。很郁闷。然后打印了那个表格，写上自己的信用卡号和签名（怕怕），传真……这个号码居然一直无人接听。两天打了七八次，全部都是无人接听。上网一搜，在Apple的官方开发者支持论坛上半年来不停的有人报怨这个传真的问题，至今无人解决，能不能传真成功全凭个人人品。</p>
<p>后来找到了一个在线的免费发美国传真的服务网站，于是又用数码相机把申请表变成图片，放到word文件里，通过这个网站上传。两天之内又在不同的时间试了四五次，每次这个网站都会自动重试五次，依然没有一次发送成功。话说回来，即便发送成功了，还要等待财务的处理流程，信用卡能否成功支付美元还不知道。支付成功了还得转到账号管理部开通账户，然后自己在线制作证书下载下来编译到程序里，上传程序还要等待审核，能不能审核成功还不知道。审核成功了放出去，有没有人买还不知道……</p>
<p>苹果天天都在宣扬自己的App Store里的4万个游戏和软件，还有那10亿次下载，但是却将如此多的问题视而不见。可能苹果公司并不太关心美国以外的地区，无论是那里的手机客户还是那里的开发人员，总感觉苹果就像一个很容易满足的小老板，饭不在多，吃饱就行，够吃了，就不考虑再赚多赚少的问题了。可能服务小众更容易保持自己的利润率，尽管利润量会小一些。</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.unfish.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.unfish.net/archives/472-20090605.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>IPhone开发体验</title>
		<link>http://www.unfish.net/archives/468-20090602.html</link>
		<comments>http://www.unfish.net/archives/468-20090602.html#comments</comments>
		<pubDate>Tue, 02 Jun 2009 14:55:41 +0000</pubDate>
		<dc:creator>非鱼</dc:creator>
				<category><![CDATA[IPhone]]></category>
		<category><![CDATA[技术文章]]></category>
		<category><![CDATA[App Store]]></category>
		<category><![CDATA[IPhone开发教程]]></category>
		<category><![CDATA[IPhone程序开发]]></category>
		<category><![CDATA[应用程序商店]]></category>
		<category><![CDATA[收费程序]]></category>

		<guid isPermaLink="false">http://www.unfish.net/archives/468-20090602.html</guid>
		<description><![CDATA[激情的力量真是不可估量。从5月27号拿到《IPhone开发基础教程》，后面用了两天的假期写了两个程序，先是一个普通的数据库阅读程序（被威锋论坛删了）。为了找到一个合适的程序结构，测试了几种不同的方式，最后选定了Navigation方式。
每个IPhone程序拥有一个Window和多个View，Windows可以理解为就是这个屏幕，Window上必须要放一个View才能显示内容给用户。程序启动的时候调用一个程序级的Delegate，打开这个Window并加载一个View。
一个View由一个ViewController来实现其功能代码，而View的界面如果你愿意的话也可以完全用代码来生成，每个控件都是View，都可以在初始化的时候确定自己的起始位置和大小，用代码来生成和显示也没问题，但是通常更合适的方式是用一个xib文件，该文件可以使用Interface Builder来构造，就像VB一样拖放控件。
所有需要同控件调用的方法，比如需要指定给按钮的方法，或者文本框里的事件需要执行的函数等等，都需要先在ViewController类里面声明为IBAction返回值的方法，然后通过在Interface Builder里面按住控件的事件名拖到Controller所属的First Owner上然后选定那个方法来建立关联。
所有需要用代码来修改其属性或调用其方法的控件，比如要启用禁用的按钮，要取值的文本框，都需要先在ViewController类里面声明IBOutlet类型的变量，然后按住Control键把First owner拖到控件上再选这个变量来给变量和文本框建立关联，然后你在代码中操作的这个变量，就是实际的这个文本框了。
《IPhone开发基础教程》这本书作为入门非常不错，可是它缺少很多高级内容，不能作为参考书，这个时候就需要这一本了《The iPhone Developer&#8217;s Cookbook-Building Applications with the iPhone SDK》，里面有许多高级用法，甚至SDK文档里没有提到过的隐藏内容。
开发过程中遇到了相当多的问题，幸亏还有Google。即使如此，仍然走了相当多的弯路。比如为了在Navigation顶部的导航栏右边加两个按钮，花了半天的时间，最后还是放弃了。始终没有办法做到彩信软件SwirlyMMS阅读界面上那个按钮效果，一开始用自定义View，放入两个按钮，再把这个View指定为rightButtonItem的CustomView，按钮是成功的放上去了，但是按钮是平板样式，跟左边的工具栏按钮的样式大相径庭。后来使用一个Toolbar，加上按钮，按钮的样式倒是正常了，但是这个Toolbar怎么也无法放到rightButtonItem那个位置，一放上去，Toolbar就占到最左边，而不是最右边，最后只能把Toolbar放到Title的位置，结果就无法显示Title了，而且Toolbar的顶部边框跟NavigationBar的边框不一样，有一条很明显的线，cookbook的教程里的图片也有这个问题。最后还是放弃了，在最下面又加了一条单独的Toolbar。还有为了播放声音，也搞了几个小时，用SoundServices库代码很简单，结果播放没声音，就是出现一点点的噪音，后来换了AVAudio库，还是只放一点点噪音。还以为是声音文件的问题，结果换了Windows自带的声音进去也不行。最后才发现是因为声音播放的代码是非独占的，刚刚开始播放就走到了下面一行release上，结果就停止了。改成全局变量搞定。
这个release在Object C里面是个很头疼的问题，当我程序出现了一个EXC_BAD_ACCESS的错误的时候，根本无从定位错误的位置，虽然知道是由于过度release造成的，但是要在众多代码中找出哪个变量是不应该release的，着实费了些功夫。
另外，程序比较大（数据库比较大，程序其实是很小的），每次放到真机上测试都要花很多时间，建议开发过程中还是使用一个特殊的数据库，弄小一点，发布的时候再换成正常的。大部分情况下用模拟器测试就够了，但是，模拟器不能发声，因为我的MAC是虚拟机。
编译出来的程序是个后缀名为.app的文件夹，在Mac下会自动识别为程序，双击会提示平台不对，不能运行，但是拿到Windows下就是个普通的文件夹。把这个app目录拖到ITunes上会自动生成一个IPA，但是这个IPA在ITunes里没图标。要做成有图标的，还得手动处理，把这个app目录放到一个Payload目录下，在Payload所在的目录放一个iTunesArtwork的文件，这个文件就是一个jpg图标，文件名改成这个就行，没有后缀。然后把这个文件和Payload目录一起压缩成zip文件，再把zip后缀改成ipa就可以了，双击就会加载到iTunes，点同步就可以安装到手机上。Apple居然不提供一个方便一点的打包工具。
基本上感受就是这些了，连续开发了几天，也在威锋上连续发布了几个大版本，程序还算比较受欢迎，等明天去申请个开发者账号，放到程序商店里看看。
]]></description>
			<content:encoded><![CDATA[<p>激情的力量真是不可估量。从5月27号拿到《IPhone开发基础教程》，后面用了两天的假期写了两个程序，先是一个普通的数据库阅读程序（被威锋论坛删了）。为了找到一个合适的程序结构，测试了几种不同的方式，最后选定了Navigation方式。</p>
<p>每个IPhone程序拥有一个Window和多个View，Windows可以理解为就是这个屏幕，Window上必须要放一个View才能显示内容给用户。程序启动的时候调用一个程序级的Delegate，打开这个Window并加载一个View。</p>
<p>一个View由一个ViewController来实现其功能代码，而View的界面如果你愿意的话也可以完全用代码来生成，每个控件都是View，都可以在初始化的时候确定自己的起始位置和大小，用代码来生成和显示也没问题，但是通常更合适的方式是用一个xib文件，该文件可以使用Interface Builder来构造，就像VB一样拖放控件。</p>
<p>所有需要同控件调用的方法，比如需要指定给按钮的方法，或者文本框里的事件需要执行的函数等等，都需要先在ViewController类里面声明为IBAction返回值的方法，然后通过在Interface Builder里面按住控件的事件名拖到Controller所属的First Owner上然后选定那个方法来建立关联。</p>
<p>所有需要用代码来修改其属性或调用其方法的控件，比如要启用禁用的按钮，要取值的文本框，都需要先在ViewController类里面声明IBOutlet类型的变量，然后按住Control键把First owner拖到控件上再选这个变量来给变量和文本框建立关联，然后你在代码中操作的这个变量，就是实际的这个文本框了。</p>
<p>《IPhone开发基础教程》这本书作为入门非常不错，可是它缺少很多高级内容，不能作为参考书，这个时候就需要这一本了《The iPhone Developer&#8217;s Cookbook-Building Applications with the iPhone SDK》，里面有许多高级用法，甚至SDK文档里没有提到过的隐藏内容。</p>
<p>开发过程中遇到了相当多的问题，幸亏还有Google。即使如此，仍然走了相当多的弯路。比如为了在Navigation顶部的导航栏右边加两个按钮，花了半天的时间，最后还是放弃了。始终没有办法做到彩信软件SwirlyMMS阅读界面上那个按钮效果，一开始用自定义View，放入两个按钮，再把这个View指定为rightButtonItem的CustomView，按钮是成功的放上去了，但是按钮是平板样式，跟左边的工具栏按钮的样式大相径庭。后来使用一个Toolbar，加上按钮，按钮的样式倒是正常了，但是这个Toolbar怎么也无法放到rightButtonItem那个位置，一放上去，Toolbar就占到最左边，而不是最右边，最后只能把Toolbar放到Title的位置，结果就无法显示Title了，而且Toolbar的顶部边框跟NavigationBar的边框不一样，有一条很明显的线，cookbook的教程里的图片也有这个问题。最后还是放弃了，在最下面又加了一条单独的Toolbar。还有为了播放声音，也搞了几个小时，用SoundServices库代码很简单，结果播放没声音，就是出现一点点的噪音，后来换了AVAudio库，还是只放一点点噪音。还以为是声音文件的问题，结果换了Windows自带的声音进去也不行。最后才发现是因为声音播放的代码是非独占的，刚刚开始播放就走到了下面一行release上，结果就停止了。改成全局变量搞定。</p>
<p>这个release在Object C里面是个很头疼的问题，当我程序出现了一个EXC_BAD_ACCESS的错误的时候，根本无从定位错误的位置，虽然知道是由于过度release造成的，但是要在众多代码中找出哪个变量是不应该release的，着实费了些功夫。</p>
<p>另外，程序比较大（数据库比较大，程序其实是很小的），每次放到真机上测试都要花很多时间，建议开发过程中还是使用一个特殊的数据库，弄小一点，发布的时候再换成正常的。大部分情况下用模拟器测试就够了，但是，模拟器不能发声，因为我的MAC是虚拟机。</p>
<p>编译出来的程序是个后缀名为.app的文件夹，在Mac下会自动识别为程序，双击会提示平台不对，不能运行，但是拿到Windows下就是个普通的文件夹。把这个app目录拖到ITunes上会自动生成一个IPA，但是这个IPA在ITunes里没图标。要做成有图标的，还得手动处理，把这个app目录放到一个Payload目录下，在Payload所在的目录放一个iTunesArtwork的文件，这个文件就是一个jpg图标，文件名改成这个就行，没有后缀。然后把这个文件和Payload目录一起压缩成zip文件，再把zip后缀改成ipa就可以了，双击就会加载到iTunes，点同步就可以安装到手机上。Apple居然不提供一个方便一点的打包工具。</p>
<p>基本上感受就是这些了，连续开发了几天，也在威锋上连续发布了几个大版本，程序还算比较受欢迎，等明天去申请个开发者账号，放到程序商店里看看。</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.unfish.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.unfish.net/archives/468-20090602.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>IPhone开发三天上手纪实</title>
		<link>http://www.unfish.net/archives/471-20090601.html</link>
		<comments>http://www.unfish.net/archives/471-20090601.html#comments</comments>
		<pubDate>Mon, 01 Jun 2009 05:18:00 +0000</pubDate>
		<dc:creator>非鱼</dc:creator>
				<category><![CDATA[IPhone]]></category>
		<category><![CDATA[技术文章]]></category>
		<category><![CDATA[App Store]]></category>
		<category><![CDATA[IPhone开发教程]]></category>
		<category><![CDATA[IPhone程序开发]]></category>
		<category><![CDATA[应用程序商店]]></category>
		<category><![CDATA[收费程序]]></category>

		<guid isPermaLink="false">http://www.unfish.net/archives/471-20090601.html</guid>
		<description><![CDATA[1、如果你有自己的Mac电脑，跳过这一步。如果没有，可以去下载这个：http://www.verycd.com/topics/2746139/，是个vmware镜像，非常完美，安装上vmware，解压就可以运行，速度不错（硬件当然要够，可以上网）。不过似乎AMD的CPU不行，如果你用的是AMD的，就别浪费带宽了。
2、启动进去以后就想办法去下载SDK，官方的下载速度还不错，用迅雷两个小时就搞定了，想办法传到Mac里面去（我是在windows里建了个serv-u的FTP，在Mac里面用ftp命令上传下载东西，很方便，以后要经常用到）。 
3、安装SDK，双击下载的dmg包，自动加载成磁盘镜像，双击里面的安装文件自动安装好，然后打开磁盘目录，到/Develop的目录下去运行xcode，能启动就算成功了。 
4、你需要一本好书，《IPhone开发基础教程》这本书是一定要买的，讲解非常细致，适合我们这种从来没有接触过Mac开发的人，每一步细节都没有省略，绝对不会出现按照书上的步骤操作完却发现结果跟书上不一致的情况。虽然翻译的有个别不到位，但是整体翻译水平是可以得80分以上的。我也没必要把里面的教程再在这里写一遍，写的也没人家好。这本书上有些高级的内容没必要一次看完，什么时候用到什么时候看就可以了。 
5、你还需要知道Object C的语法跟其它语言的不同，如果你一门语言也不会，那还是从头学C语言去吧。如果你已经用过其它编程语言，看看这本就够了。http://www.weiphone.com/viewthread.php?tid=149737
6、万事俱备，可以开始动手了。照书上的课程练习几章，打打代码，写两个程序在模拟器里跑起来。 
7、需要构思自己想要开发的程序的架构，分几个界面（View），界面间怎样相互调用，每个界面上放什么，然后找一章类似的教程，照着做，加入自己的内容就行了。 
8、编译完成测试通过，想放到IPhone上去运行，还需要个证书，当然现在是不太可能去花99美元买一个了，成熟了再买也不迟。照这个做：http://www.weiphone.com/thread-222380-1-3.html，自己做个证书，添加到Project setting和info.plist里面去，再编译成IPhone平台版本就可以用了。（这哥们的第四篇文章我照做都没有成功，不知道哪一步写的有问题）。 
至此，你的第一个程序就可以发布出去见人了。
]]></description>
			<content:encoded><![CDATA[<p>1、如果你有自己的Mac电脑，跳过这一步。如果没有，可以去下载这个：<a href="http://www.verycd.com/topics/2746139/">http://www.verycd.com/topics/2746139/</a>，是个vmware镜像，非常完美，安装上vmware，解压就可以运行，速度不错（硬件当然要够，可以上网）。不过似乎AMD的CPU不行，如果你用的是AMD的，就别浪费带宽了。</p>
<p>2、启动进去以后就想办法去下载SDK，官方的下载速度还不错，用迅雷两个小时就搞定了，想办法传到Mac里面去（我是在windows里建了个serv-u的FTP，在Mac里面用ftp命令上传下载东西，很方便，以后要经常用到）。 </p>
<p>3、安装SDK，双击下载的dmg包，自动加载成磁盘镜像，双击里面的安装文件自动安装好，然后打开磁盘目录，到/Develop的目录下去运行xcode，能启动就算成功了。 </p>
<p>4、你需要一本好书，《IPhone开发基础教程》这本书是一定要买的，讲解非常细致，适合我们这种从来没有接触过Mac开发的人，每一步细节都没有省略，绝对不会出现按照书上的步骤操作完却发现结果跟书上不一致的情况。虽然翻译的有个别不到位，但是整体翻译水平是可以得80分以上的。我也没必要把里面的教程再在这里写一遍，写的也没人家好。这本书上有些高级的内容没必要一次看完，什么时候用到什么时候看就可以了。 </p>
<p>5、你还需要知道Object C的语法跟其它语言的不同，如果你一门语言也不会，那还是从头学C语言去吧。如果你已经用过其它编程语言，看看这本就够了。<a href="http://www.weiphone.com/viewthread.php?tid=149737">http://www.weiphone.com/viewthread.php?tid=149737</a></p>
<p>6、万事俱备，可以开始动手了。照书上的课程练习几章，打打代码，写两个程序在模拟器里跑起来。 </p>
<p>7、需要构思自己想要开发的程序的架构，分几个界面（View），界面间怎样相互调用，每个界面上放什么，然后找一章类似的教程，照着做，加入自己的内容就行了。 </p>
<p>8、编译完成测试通过，想放到IPhone上去运行，还需要个证书，当然现在是不太可能去花99美元买一个了，成熟了再买也不迟。照这个做：<a href="http://www.weiphone.com/thread-222380-1-3.html">http://www.weiphone.com/thread-222380-1-3.html</a>，自己做个证书，添加到Project setting和info.plist里面去，再编译成IPhone平台版本就可以用了。（这哥们的第四篇文章我照做都没有成功，不知道哪一步写的有问题）。 </p>
<p>至此，你的第一个程序就可以发布出去见人了。</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.unfish.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.unfish.net/archives/471-20090601.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>IPhone开发初步认识</title>
		<link>http://www.unfish.net/archives/467-20090530.html</link>
		<comments>http://www.unfish.net/archives/467-20090530.html#comments</comments>
		<pubDate>Sat, 30 May 2009 04:42:43 +0000</pubDate>
		<dc:creator>非鱼</dc:creator>
				<category><![CDATA[IPhone]]></category>
		<category><![CDATA[技术文章]]></category>
		<category><![CDATA[App Store]]></category>
		<category><![CDATA[IPhone开发教程]]></category>
		<category><![CDATA[IPhone程序开发]]></category>
		<category><![CDATA[应用程序商店]]></category>
		<category><![CDATA[收费程序]]></category>

		<guid isPermaLink="false">http://www.unfish.net/archives/467-20090530.html</guid>
		<description><![CDATA[想开发IPhone程序，首先得弄个MacOSX系统，版本要求10.5.3以上。虽然网络上也有一些Linux下甚至XP下搭建开发环境的文章，但是那些只限于开发工具链，没有开发工具，对于新手来说，不使用开发工具直接写代码来开发IPhone程序，那是根本没可能成功的事。不管是买台Mac也好，在PC上装个Mac也好，用虚拟机也好，准备好操作系统。
然后是上Apple的开发者中心注册个用户名，下载IPhone 2.2.1的SDK，很大，1.75G。下载完成后安装很容易。然后就可以进/Develop目录下启动xcode程序了。File菜单下面新建项目，提供了几个模板，选个View Based项目，下一步，改个名字，就生成了一套新项目的框架，直接点顶上的Build and Go就可以编译完成并自动启动IPhone模拟器然后自动启动这个程序。
IPhone程序的结构还是比较容易理解的，Object C的语法虽然是比较奇怪，（从来没有在别的语言里面见过这种用法），但是只要稍微理解一下跟别的语言的语法上的不同，要上手其实是很容易的。对于Object C方面，要了解的无非就是头文件里面的类定义，属性定义，方法定义，实现文件里的属性声明，方法声明。类的实例化以及内存释放，类方法和属性的调用方式，就足够了。
IPhone的程序架构方面是完完全全的MVC架构，视图和逻辑完全分开。在窗口编辑器（Interface Builder）里面设计的窗口跟代码没有任何关系，要想使用窗体上的控件需要在Controller层定义相关变量和动作方法，然后把变量和方法通过拖拉的方法跟控件关联起来，然后程序就会知道这两者之间的关系了。同一个方法可以方便的关联到任何按钮上，同一个变量也可以指向任何一个类型相符的控件。你所要了解的，就是在Controller中应该使用哪几个方法来显示和保存数据。
Apple提供的IPhone可用的控件种类不多，但是每个都很强大，大部分控件都可以互相嵌入，因为大家都是从同一个基类UIView继承下来的，所以，视图里可以嵌入视图，表格里也可以嵌入其它视图，比如表格的每一行里都可以放入标签或者图片，或者另一个表格。充分利用这种特点，就可以用很少的控件类型写出非常丰富的界面。
IPhone程序处理数据直接使用sqlite3数据库，读写也都还算方便，当然要是能够提供一个官方的ORM类那就更好了，目前还是得自己去实现一个。不过sqlite本身没有加密功能，所以你的程序如果是以数据为核心竞争力的，还得自己想想办法加密数据库里的数据，没有办法像其它数据库那样直接定义一个复杂的数据库读写密码来解决问题。IPhone的数据库读取性能很强，在数据库里读取5000多条数据生成一个TableView，只需要六七秒的样子就可以显示出这个表格，并且上下滑动表格也很平滑，并不存在什么内存问题。
编译出来的软件只能在模拟器里运行，放到IPhone上是不能运行的，因为没有授权。需要花99美元去买个Apple的授权，才能让程序运行在IPhone上，当然，这一步有办法跳过去，用MacOS自带的签名工具自己做一个签名，就可以让程序跑在IPhone上，但是这样的程序还是没有办法放到AppStore里面去卖钱的，想赚钱，这个投资是必须的。Apple真是个稳赚不赔的生意人啊。
]]></description>
			<content:encoded><![CDATA[<p>想开发IPhone程序，首先得弄个MacOSX系统，版本要求10.5.3以上。虽然网络上也有一些Linux下甚至XP下搭建开发环境的文章，但是那些只限于开发工具链，没有开发工具，对于新手来说，不使用开发工具直接写代码来开发IPhone程序，那是根本没可能成功的事。不管是买台Mac也好，在PC上装个Mac也好，用虚拟机也好，准备好操作系统。</p>
<p>然后是上Apple的开发者中心注册个用户名，下载IPhone 2.2.1的SDK，很大，1.75G。下载完成后安装很容易。然后就可以进/Develop目录下启动xcode程序了。File菜单下面新建项目，提供了几个模板，选个View Based项目，下一步，改个名字，就生成了一套新项目的框架，直接点顶上的Build and Go就可以编译完成并自动启动IPhone模拟器然后自动启动这个程序。</p>
<p>IPhone程序的结构还是比较容易理解的，Object C的语法虽然是比较奇怪，（从来没有在别的语言里面见过这种用法），但是只要稍微理解一下跟别的语言的语法上的不同，要上手其实是很容易的。对于Object C方面，要了解的无非就是头文件里面的类定义，属性定义，方法定义，实现文件里的属性声明，方法声明。类的实例化以及内存释放，类方法和属性的调用方式，就足够了。</p>
<p>IPhone的程序架构方面是完完全全的MVC架构，视图和逻辑完全分开。在窗口编辑器（Interface Builder）里面设计的窗口跟代码没有任何关系，要想使用窗体上的控件需要在Controller层定义相关变量和动作方法，然后把变量和方法通过拖拉的方法跟控件关联起来，然后程序就会知道这两者之间的关系了。同一个方法可以方便的关联到任何按钮上，同一个变量也可以指向任何一个类型相符的控件。你所要了解的，就是在Controller中应该使用哪几个方法来显示和保存数据。</p>
<p>Apple提供的IPhone可用的控件种类不多，但是每个都很强大，大部分控件都可以互相嵌入，因为大家都是从同一个基类UIView继承下来的，所以，视图里可以嵌入视图，表格里也可以嵌入其它视图，比如表格的每一行里都可以放入标签或者图片，或者另一个表格。充分利用这种特点，就可以用很少的控件类型写出非常丰富的界面。</p>
<p>IPhone程序处理数据直接使用sqlite3数据库，读写也都还算方便，当然要是能够提供一个官方的ORM类那就更好了，目前还是得自己去实现一个。不过sqlite本身没有加密功能，所以你的程序如果是以数据为核心竞争力的，还得自己想想办法加密数据库里的数据，没有办法像其它数据库那样直接定义一个复杂的数据库读写密码来解决问题。IPhone的数据库读取性能很强，在数据库里读取5000多条数据生成一个TableView，只需要六七秒的样子就可以显示出这个表格，并且上下滑动表格也很平滑，并不存在什么内存问题。</p>
<p>编译出来的软件只能在模拟器里运行，放到IPhone上是不能运行的，因为没有授权。需要花99美元去买个Apple的授权，才能让程序运行在IPhone上，当然，这一步有办法跳过去，用MacOS自带的签名工具自己做一个签名，就可以让程序跑在IPhone上，但是这样的程序还是没有办法放到AppStore里面去卖钱的，想赚钱，这个投资是必须的。Apple真是个稳赚不赔的生意人啊。</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.unfish.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.unfish.net/archives/467-20090530.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
