Xcode7文档下载地址

具体的下载地址,可以在这里查到
https://developer.apple.com/library/downloads/docset-index.dvtdownloadableindex

对于Xcode7,对应文档的下载地址为
watchOS 2.0 Documentation
iOS 9.0 Documentation
OS X 10.11 Documentation
Xcode 7 Documentation

已知问题
1、文档下载安装后可以使用,但Xcode无法识别。
2、从apple官网下,还是太慢了

Apple In House 发布详解(七牛升级服务器搭建)

大家都懂的,很多云存储比如Dropbox国内根本访问不了,某度的规则又不适合做这个功能。

那就用七牛吧。

1、到七牛注册账号
http://www.qiniu.com/

2、上传身份证,进行认证
谁让你想省钱呢

3、认证通过后,新建一个空间,设置开通HTTPS,设置自己的域名
假设你的访问地址为https://dn-xxxxxx.qbox.me/

4、将html文件及plist中文件的绝对路径全部修改为https://dn-xxxxxx.qbox.me/xxxxxx

5、上传文件,将plist的mime type修改为text/xml

6、搞定

还是花钱买的证书好用啊。

Apple In House 发布详解(HTTPS证书生成)

1、如果是在Windows下面,用openssl就可以搞定了
1.1首先生成pem格式的CA证书,并导出为crt格式

set OPENSSL_CONF=%OPENSSL_HOME%\bin\openssl.cfg
openssl genrsa 1024 > NMyCA1024.key
openssl req -new -x509 -nodes -key NMyCA1024.key -days 1095 -subj "/C=CN/ST=ShangHai/L=ShangHai/O=NEOHOPE/OU=Development/CN=NMyCA1024" > NMyCA1024.pem

1.2将CA证书导出为der格式

openssl x509 -outform der -in NMyCA1024.pem -out NMyCA1024.der

1.3生成网站私钥及证书签名请求

set OPENSSL_CONF=%OPENSSL_HOME%\bin\openssl.cfg
openssl genrsa 1024 > server.key
openssl req -new -key server.key -subj "/C=CN/ST=ShangHai/L=ShangHai/O=NEOHOPE/OU=Development/CN=192.168.130.50" > server.csr

1.4用CA证书处理证书签名请求,生成CA授权的证书

openssl x509 -req -in server.csr -CA NMyCA1024.pem -CAkey NMyCA1024.key -CAcreateserial -days 365 > serversigned.crt

1.5将NMyCA1024.der、server.key、serversigned.crt拷给证书使用者

1.6一定要保管好NMyCA1024.key及NMyCA1024.pem,不要弄丢,更不要拷给别人

2、如果是在MAC下面,有一个工具就能搞定EasyCert

./EasyCert -cn NMyCA -h 192.168.130.50

但同样的,要保护好CA的私钥。

Apple In House 发布详解(内网升级服务器搭建)

要内网升级的话,需要搭建内网升级HTTPS服务器。

以APACHE为例:

1、下载支持SSL的APACHE服务程序,如果你已经有APACHE服务,可以查找mod_ssl.so,如果没有请重新下载

2、打开HTTPS支持,httpd.conf文件中,去掉下面两行的注释

LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf

修改httpd-ssl.conf中证书信息

SSLCertificateFile "C:/ProgramerTools/WebServer/Apache2.2/conf/server.crt"
SSLCertificateKeyFile "C:/ProgramerTools/WebServer/Apache2.2/conf/server.key"

3、将httpd.conf及httpd-ssl.conf路径信息调整为正确路径

4、此时HTTP与HTTPS都可以访问APACHE服务了

5、构建升级网站

5.1、准备资源文件
57×57图标,512×512图标,in house发布签名的ipa文件,CA根证书

5.2、准备plist文件

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
   <!-- array of downloads. -->
   <key>items</key>
   <array>
       <dict>
           <!-- an array of assets to download -->
           <key>assets</key>
           <array>
               <!-- software-package: the ipa to install. -->
               <dict>
                   <!-- required.  the asset kind. -->
                   <key>kind</key>
                   <string>software-package</string>
                   <!-- required.  the URL of the file to download. -->
                   <key>url</key>
                   <string>https://192.168.130.50/XXXXX.ipa</string>
               </dict>
               <!-- display-image: the 57*57 icon to display during download. -->
               <dict>
                   <key>kind</key>
                   <string>display-image</string>
                   <key>url</key>
                   <string>https://192.168.130.50/XXXXX_57.png</string>
               </dict>
               <!-- full-size-image: the large 512x512 icon used by iTunes. -->
               <dict>
                   <key>kind</key>
                   <string>full-size-image</string>
                   <key>url</key>
                   <string>https://192.168.130.50/XXXXX_512.png</string>
               </dict>
           </array>
           <key>metadata</key>
           <dict>
               <!-- required -->
               <key>bundle-identifier</key>
               <string>程序的app id</string>
               <!-- optional (software only) -->
               <key>bundle-version</key>
               <string>程序的版本</string>
               <!-- required.  the download kind. -->
               <key>kind</key>
               <string>software</string>
               <!-- optional. displayed during download; -->
               <!-- typically company name -->
               <key>subtitle</key>
               <string>厂商名称</string>
               <!-- required.  the title to display during the download. -->
               <key>title</key>
               <string>软件名称</string>
           </dict>
       </dict>
   </array>
</dict>
</plist>

5.3、准备.htaccess文件,与plist文件放在一起

AddType text/xml .plist
AddType application/octet-stream .ipa

修改httpd.conf文件,让.htaccess文件生效

#升级文件所在的目录
AllowOverride FileInfo

5.4、准备网页

<html>
	<body>
		<a href="https://192.168.130.46/myCA.cer">Install CA Cert</a>
		</br>
                 <a href="itms-services://?action=download-manifest&amp;url=https://192.168.130.50/XXXXX.plist">Install My App over the air </a>
	</body>
</html>

6、使用
6.1、HTTPS访问网页,下载CA证书,并添加到IOS的信任列表
6.2、点击安装App,然后就开始自动安装啦

7、自动升级
请Google或github一下iVersion

Apple In House 发布详解(准备工作)

1、你需要知道自己为什么需要Apple In House发布应用,好处及限制分别是什么,不清楚请Google。

2、如果是公司申请,需要有D.U.N.S.编码(邓氏编码)
如果不嫌麻烦,可以国外申请
http://www.dunsregistered.com/
如果不差钱,请国内申请
http://dnbregistered.com.cn/
这个编码在做国际贸易的时候也很有用的

3、注册Apple Id,并购买iOS Development Enterprise Program,一定要搞清楚,不要买成iOS Development Program

4、使用发布版的Certificates和正确的App ID得到In House版本的Provisioning Profiles,其流程与普通发布证书一样,不清楚请Google

5、XCode使用正确的签名,编译并打包为ipa文件

6、将ipa拖到iTunes中,尝试用iTunes安装到你的IOS设备,如果安装不成功,请检查签名是否正确

XCode不显示AppleWatch模拟器

今天调试iWatch程序的时候,开始无论如何都没有iWatch模拟器。
后来发现,在IOS模拟器的菜单中,进行如下操作即可:

Hardware->External Displays->Apple Watch-38mm

Hardware->External Displays->Apple Watch-42mm

再次调试程序,目标选择WatchKit App就可以正常运行啦。

IOS实现Custom Protocol

在IOS中,实现Custom Protocol,需要以下两步:

1、修改Info.plist文件,增加以下内容:

    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLName</key>
            <string>com.neohope.custom.protocol.test</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>myproto</string>
            </array>
        </dict>
    </array>

2、在AppDelegate.m中,增加以下内容:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    if(url!=nil)
    {
        NSString *path = url.absoluteString;
        //do your job here
    }
    return YES;
}

IOS调用Custom Protocol

    NSString* testUrl = @"myprotocal://192.168.0.1:8080/test?username=user&password=user";
    NSURL *myURL = [NSURL URLWithString:testUrl];
    [[UIApplication sharedApplication] openURL:myURL ]

XCode空白工程,手工添加Storyboard步骤

XCode新建空白工程后,手工增加Storyboard并添加ViewController后,只显示空白,不显示ViewController:
调试时会提示:

Application windows are expected to have a root view controller at the end of application launch

这时,需要手工修改一处代码和一处配置:
1、AppDelegate源码文件

//修改前
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];

    return YES;
}

//修改后
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    return YES;
}

2、指定启动的Storyboard
在Project-》Targets-》Summary中修改Main Storyboard属性为新添加的Storyboard名称(不带后缀)。
或者
修改XXX-Info.plist文件,添加属性

<key>UIMainStoryboardFile</key>
<string>Storyboard名称(不带后缀)</string>

然后就OK啦。

ipa包重签名

如果ipa打包时,签名文件不包括你的设备id,用itunes安装后是无法使用的,
这样,就要重新申请包含你设备id的证书,用下面的方法重签名:

1、把ipa和新证书放到同一目录下

2、新建文件resignipa.sh

IPA="xx.ipa"
IPAOUT="xxx.ipa"
PROVISION="xxxx.mobileprovision"
CERTIFICATE="xxxxx" # must be in keychain

# unzip the ipa
unzip -q "$IPA"

# remove the signature
rm -rf Payload/*.app/_CodeSignature Payload/*.app/CodeResources

# replace the provision
cp "$PROVISION" Payload/*.app/embedded.mobileprovision

# sign with the new certificate
/usr/bin/codesign -f -s "$CERTIFICATE" --resource-rules Payload/*.app/ResourceRules.plist Payload/*.app

# zip it back up
zip -qr "$IPAOUT" Payload

3、启动命令行

chmod 777 resignipa.sh
./resignipa.sh