2013年4月29日 星期一

UX - 反白是必須的嗎

按鈕或物件絕對要有觸控反應,讓使用者知道他們點到了

因為這樣一來,他們就會接受之後的處理時間

我們不能保證任何反應可以立刻處理完畢

因此,讓使用者知道正在處理,是一件很重要的事情

也可以避免他們連點兩次造成另外的問題..

pushemebay 在正式環境失敗

搞了快兩天,終於發現了原因

原文來自

http://www.cocoachina.com/bbs/simple/?t116468.html

http://blog.csdn.net/a6472953/article/details/8604823

這位真是功德無量..

result = MakeServerConnection("gateway.sandbox.push.apple.com", 2195, &socket, &peer);   改为

result = MakeServerConnection("gateway.push.apple.com", 2195, &socket, &peer);

result = SSLSetPeerDomainName(context, "gateway.sandbox.push.apple.com", 30);   改为

result = SSLSetPeerDomainName(context, "gateway.push.apple.com", 22);//22表示gateway.push.apple.com地址的长度

說明一下:

  1. 正式環境使用的 server 是 gatewat.push.apple.com
  2. SSLSetPeerDomainName 方法的最後面參數內容是domain 長度..這種事情誰會知道阿(翻桌

不過 javaApns 也不能用?

難道有相同問題嘛..(準備翻原始碼

順便轉貼一下 SSL Error code

/* errAuthorizationSuccess */ "0" = "该操作已成功完成。";

/* errAuthorizationInvalidSet */ "-60001" = "授权权限无效。";

/* errAuthorizationInvalidRef */ "-60002" = "授权参考无效。";

/* errAuthorizationInvalidTag */ "-60003" = "授权标记无效。";

/* errAuthorizationInvalidPointer */ "-60004" = "返回的授权无效。";

/* errAuthorizationDenied */ "-60005" = "授权被拒绝。";

/* errAuthorizationCanceled */ "-60006" = "授权被用户取消。";

/* errAuthorizationInteractionNotAllowed */ "-60007" = "授权被拒绝,因为不能进行任何用户交互操作。";

/* errAuthorizationInternal */ "-60008" = "无法获取此操作的授权。";

/* errAuthorizationExternalizeNotAllowed */ "-60009" = "授权不允许被转换为外部格式。";

/* errAuthorizationInternalizeNotAllowed */ "-60010" = "授权不允许从外部格式中创建。";

/* errAuthorizationInvalidFlags */ "-60011" = "所提供的选项对此授权操作无效。";

/* errAuthorizationToolExecuteFailure */ "-60031" = "所指定的程序未能被执行。";

/* errAuthorizationToolEnvironmentError */ "-60032" = "执行特权工具过程中返回无效状态。";

/* errAuthorizationBadAddress */ "-60033" = "要求的套接字地址无效(必须在 0 至 1023 之间,包括 0 和 1023)。";

/* errSSLProtocol */ "-9800" = "SSL 协议错误";

/* errSSLNegotiation */ "-9801" = "Cipher Suite 协商失败";

/* errSSLFatalAlert */ "-9802" = "致命警告";

/* errSSLWouldBlock */ "-9803" = "输入输出将阻塞(不致命)";

/* errSSLSessionNotFound */ "-9804" = "尝试恢复未知的会话";

/* errSSLClosedGraceful */ "-9805" = "正常关闭连接";

/* errSSLClosedAbort */ "-9806" = "通过错误关闭连接";

/* errSSLXCertChainInvalid */ "-9807" = "无效的证书链";

/* errSSLBadCert */ "-9808" = "错误的证书格式";

/* errSSLCrypto */ "-9809" = "底层的密码错误";

/* errSSLInternal */ "-9810" = "内部错误";

/* errSSLModuleAttach */ "-9811" = "模块连接失败";

/* errSSLUnknownRootCert */ "-9812" = "有效的证书串,不被信任的根";

/* errSSLNoRootCert */ "-9813" = "证书串未被根验证";

/* errSSLCertExpired */ "-9814" = "串具有一个过期的证书";

/* errSSLCertNotYetValid */ "-9815" = "串具有一个无效的证书";

/* errSSLClosedNoNotify */ "-9816" = "服务器在没有通知的情况下关闭会话";

/* errSSLBufferOverflow */ "-9817" = "没有提供足够的缓冲区";

/* errSSLBadCipherSuite */ "-9818" = "错误的 SSLCipherSuite";

/* errSSLPeerUnexpectedMsg */ "-9819" = "接收到意外的信息";

/* errSSLPeerBadRecordMac */ "-9820" = "错误的 MAC";

/* errSSLPeerDecryptionFail */ "-9821" = "解密失败";

/* errSSLPeerRecordOverflow */ "-9822" = "记录溢出";

/* errSSLPeerDecompressFail */ "-9823" = "解压缩失败";

/* errSSLPeerHandshakeFail */ "-9824" = "握手失败";

/* errSSLPeerBadCert */ "-9825" = "其他错误证书";

/* errSSLPeerUnsupportedCert */ "-9826" = "不被支持的错误证书格式";

/* errSSLPeerCertRevoked */ "-9827" = "被撤消的证书";

/* errSSLPeerCertExpired */ "-9828" = "过期的证书";

/* errSSLPeerCertUnknown */ "-9829" = "未知的证书";

/* errSSLIllegalParam */ "-9830" = "非法参数";

/* errSSLPeerUnknownCA */ "-9831" = "未知证书授权";

/* errSSLPeerAccessDenied */ "-9832" = "被拒绝的访问";

/* errSSLPeerDecodeError */ "-9833" = "解码错误";

/* errSSLPeerDecryptError */ "-9834" = "解密错误";

/* errSSLPeerExportRestriction */ "-9835" = "导出限制";

/* errSSLPeerProtocolVersion */ "-9836" = "错误的协议版本";

/* errSSLPeerInsufficientSecurity */ "-9837" = "安全性不足";

/* errSSLPeerInternalError */ "-9838" = "内部错误";

/* errSSLPeerUserCancelled */ "-9839" = "被用户取消";

/* errSSLPeerNoRenegotiation */ "-9840" = "不允许重新协商";

/* errSSLServerAuthCompleted */ "-9841" = "服务器证书有效,如果验证已停用,则会被忽略";

/* errSSLClientCertRequested */ "-9842" = "服务器已请求了客户端证书";

/* errSSLHostNameMismatch */ "-9843" = "端主机名称不相符";

/* errSSLConnectionRefused */ "-9844" = "响应之前由端中断连接";

/* errSSLDecryptionFail */ "-9845" = "解密失败";

/* errSSLBadRecordMac */ "-9846" = "错误的 MAC";

/* errSSLRecordOverflow */ "-9847" = "记录溢出";

/* errSSLBadConfiguration */ "-9848" = "配置错误";

/* errSecNotAvailable */ "-25291" = "没有可用的钥匙串。您可能需要重新启动电脑。";

/* errSecReadOnly */ "-25292" = "不能修改此钥匙串。";

/* errSecAuthFailed */ "-25293" = "您输入的用户名称或口令不正确。";

/* errSecNoSuchKeychain */ "-25294" = "找不到指定的钥匙串。";

/* errSecInvalidKeychain */ "-25295" = "指定的钥匙串不是一个有效的钥匙串文件。";

/* errSecDuplicateKeychain */ "-25296" = "已存在有相同名称的钥匙串。";

/* errSecDuplicateCallback */ "-25297" = "已安装指定的回叫功能。";

/* errSecInvalidCallback */ "-25298" = "指定的回叫功能无效。";

/* errSecDuplicateItem */ "-25299" = "钥匙串中已存在有指定的项。";

/* errSecItemNotFound */ "-25300" = "在钥匙串中找不到指定的项。";

/* errSecBufferTooSmall */ "-25301" = "没有足够的内存来使用指定的项。";

/* errSecDataTooLarge */ "-25302" = "此项包含的信息太大或信息的格式不能显示。";

/* errSecNoSuchAttr */ "-25303" = "指定的属性不存在。";

/* errSecInvalidItemRef */ "-25304" = "指定的项不再有效。它可能已从钥匙串删除。";

/* errSecInvalidSearchRef */ "-25305" = "不能搜索当前的钥匙串。";

/* errSecNoSuchClass */ "-25306" = "指定的项似乎不是有效的钥匙串项。";

/* errSecNoDefaultKeychain */ "-25307" = "找不到默认的钥匙串。";

/* errSecInteractionNotAllowed */ "-25308" = "不允许用户进行交互操作。";

/* errSecReadOnlyAttr */ "-25309" = "不能修改指定的属性。";

/* errSecWrongSecVersion */ "-25310" = "此钥匙串是使用其他版本的系统软件创建的,因此不能打开它。";

/* errSecKeySizeNotAllowed */ "-25311" = "此项指定的密钥尺寸太大。";

/* errSecNoStorageModule */ "-25312" = "不能载入需要的组件(数据存储模块)。您可能需要重新启动您的电脑。";  /* errSecNoCertificateModule */ "-25313" = "不能载入需要的组件(证书模块)。您可能需要重新启动您的电脑。";  /* errSecNoPolicyModule */ "-25314" = "不能载入需要的组件(策略模块)。您可能需要重新启动您的电脑。";

/* errSecInteractionRequired */ "-25315" = "需要进行用户交互操作,但当前不允许。";

/* errSecDataNotAvailable */ "-25316" = "不能取回此项的内容。";

/* errSecDataNotModifiable */ "-25317" = "不能修改此项的内容。";

/* errSecCreateChainFailed */ "-25318" = "找不到验证此证书所需的一个或多个证书。";

/* errSecInvalidPrefsDomain */ "-25319" = "指定的首选域无效。";

/* errSecACLNotSimple */ "-25240" = "指定的访问控制列表不是标准(简单)形式。";

/* errSecPolicyNotFound */ "-25241" = "找不到指定的策略。";

/* errSecInvalidTrustSetting */ "-25242" = "指定的信任设置无效。";

/* errSecNoAccessForItem */ "-25243" = "指定的项没有访问控制。";

/* errSecInvalidOwnerEdit */ "-25244" = "更改项所有者的尝试无效。";

/* errSecTrustNotAvailable */ "-25245" = "无可用的信任结果。";

/* errSecUnsupportedFormat */ "-25256" = "不被支持的导入/导出格式。";

/* errSecUnknownFormat */ "-25257" = "导入中的未知格式。";

/* errSecKeyIsSensitive */ "-25258" = "重要资料必须打包以进行导出。";

/* errSecMultiplePrivKeys */ "-25259" = "尝试导入多个专用密钥。";

/* errSecPassphraseRequired */ "-25260" = "导入/导出需要口令。";

/* errSecInvalidPasswordRef */ "-25261" = "密码引用无效。";

/* errSecInvalidTrustSettings */ "-25262" = "信任设置记录已损坏。";

/* errSecNoTrustSettings */ "-25263" = "未找到信任设置。";

/* errSecPkcs12VerifyFailure */ "-25264" = "PKCS12 导入过程中,MAC 验证失败。";

/* CSSMERR_CSP_INVALID_DATA_COUNT */ "-2147415768" = "CSP 缓冲区矢量错误值。";

/* CSSMERR_CSP_INVALID_CONTEXT */ "-2147415760" = "CSP 密码关联错误值。";

/* CSSMERR_CSP_STAGED_OPERATION_IN_PROGRESS */ "-2147415736" = "CSP 多级密码 API 错误值。";

/* CSSMERR_CSP_APPLE_PUBLIC_KEY_INCOMPLETE */ "-2147415039" = "* 尝试使用的公用密钥不完整,* 因为缺少算法专用的参数。";

/* CSSMERR_CSP_APPLE_SIGNATURE_MISMATCH */ "-2147415038" = "代码签名匹配失败";

/* CSSMERR_CSP_APPLE_INVALID_KEY_START_DATE */ "-2147415037" = "密钥 StartDate/EndDate 无效";

/* CSSMERR_CSPDL_APPLE_DL_CONVERSION_ERROR */ "-2147415035" = "钥匙串同步错误代码";

/* CSSMERR_CSP_APPLE_SSLv2_ROLLBACK */ "-2147415034" = "SSLv2 填充检查:检测到回滚攻击";

/* CSSMERR_APPLEDL_INVALID_OPEN_PARAMETERS */ "-2147412992" = "传递给 CSSM_DL_DbCreate 或 CSSM_DL_DbOpen 的 OpenParameters 自变量既不是 NULL,也不是有效的 CSSM_APPLEDL_OPEN_PARAMETERS 结构的指针。";

/* CSSMERR_APPLEDL_DISK_FULL */ "-2147412991" = "操作失败,因为磁盘已满";

/* CSSMERR_APPLEDL_QUOTA_EXCEEDED */ "-2147412990" = "一个操作失败,因为已超过磁盘配额";

/* CSSMERR_APPLEDL_FILE_TOO_BIG */ "-2147412989" = "操作失败,因为文件太大";

/* CSSMERR_APPLEDL_INVALID_DATABASE_BLOB */ "-2147412988" = "钥匙串数据库的内部信息 (-blob-) 无效。";  /* CSSMERR_APPLEDL_INCOMPATIBLE_DATABASE_BLOB */ "-2147412986" = "数据库内部信息 (-blob-) 的内部数据格式版本无效。";

/* CSSMERR_APPLETP_HOSTNAME_MISMATCH */ "-2147408896" = "证书的通用名称与应用程序指定的主机名称不匹配";  /* CSSMERR_APPLETP_UNKNOWN_CRITICAL_EXTEN */ "-2147408895" = "无法理解 Critical 标志为确定扩展";

/* CSSMERR_APPLETP_NO_BASIC_CONSTRAINTS */ "-2147408894" = "每个策略均要求基本约束扩展,但没有出现";

/* CSSMERR_APPLETP_INVALID_CA */ "-2147408893" = "无效 BasicConstraints.CA";

/* CSSMERR_APPLETP_INVALID_AUTHORITY_ID */ "-2147408892" = "无效的授权密钥 ID";

/* CSSMERR_APPLETP_INVALID_SUBJECT_ID */ "-2147408891" = "无效的主题密钥 ID";

/* CSSMERR_APPLETP_INVALID_KEY_USAGE */ "-2147408890" = "策略使用的密钥无效";

/* CSSMERR_APPLETP_INVALID_EXTENDED_KEY_USAGE */ "-2147408889" = "策略使用的扩展密钥无效";

/* CSSMERR_APPLETP_INVALID_ID_LINKAGE */ "-2147408888" = "无效主题/代理密钥 ID 链接";

/* CSSMERR_APPLETP_PATH_LEN_CONSTRAINT */ "-2147408887" = "已超过 PathLengthConstraint";

/* CSSMERR_APPLETP_INVALID_ROOT */ "-2147408886" = "证书组在没有通过自验证的根证书处终止";

/* CSSMERR_APPLETP_CRL_EXPIRED */ "-2147408885" = "CRL 已过期/仍未生效";

/* CSSMERR_APPLETP_CRL_NOT_FOUND */ "-2147408883" = "不能找到合适的 CRL";

/* CSSMERR_APPLETP_CRL_SERVER_DOWN */ "-2147408882" = "指定的 CRL 服务器已关闭";

/* CSSMERR_APPLETP_CRL_BAD_URI */ "-2147408881" = "难以辨认的 CRL 分布点 URL";

/* CSSMERR_APPLETP_UNKNOWN_CERT_EXTEN */ "-2147408880" = "未知的至关重要的证书/CRL 扩展";

/* CSSMERR_APPLETP_CRL_NOT_TRUSTED */ "-2147408878" = "定位符或根不能验证 CRL";

/* CSSMERR_APPLETP_CRL_INVALID_ANCHOR_CERT */ "-2147408877" = "CRL 已被不被信任的根验证";

/* CSSMERR_APPLETP_CRL_POLICY_FAIL */ "-2147408876" = "CRL 策略验证失败";

/* CSSMERR_APPLETP_IDP_FAIL */ "-2147408875" = "IssuingDistributionPoint 扩展违例";

/* CSSMERR_APPLETP_CERT_NOT_FOUND_FROM_ISSUER */ "-2147408874" = "在指定的 issuerAltName 处未找到证书";

/* CSSMERR_APPLETP_BAD_CERT_FROM_ISSUER */ "-2147408873" = "从指定的 issuerAltName 处获取的错误证书";  /* CSSMERR_APPLETP_SMIME_EMAIL_ADDRS_NOT_FOUND */ "-2147408872" = "S/MIME 电子邮件地址不相符";

/* CSSMERR_APPLETP_SMIME_BAD_EXT_KEY_USE */ "-2147408871" = "未找到合适的 S/MIME ExtendedKeyUsage";  /* CSSMERR_APPLETP_SMIME_BAD_KEY_USE */ "-2147408870" = "S/MIME KeyUsage 不兼容性";

/* CSSMERR_APPLETP_SMIME_KEYUSAGE_NOT_CRITICAL */ "-2147408869" = "S/MIME,带有已标上 !critical 的 KeyUsage 的证书";

/* CSSMERR_APPLETP_SMIME_NO_EMAIL_ADDRS */ "-2147408868" = "S/MIME,叶节点带空白主题名称,SubjectAltName 中无电子邮件地址 *";

/* CSSMERR_APPLETP_SMIME_SUBJ_ALT_NAME_NOT_CRIT */ "-2147408867" = "S/MIME,叶节点带空白主题名称,SubjectAltName * 不是至关重要的";

/* CSSMERR_APPLETP_SSL_BAD_EXT_KEY_USE */ "-2147408866" = "未找到合适的 SSL ExtendedKeyUsage";

/* CSSMERR_APPLETP_OCSP_BAD_RESPONSE */ "-2147408865" = "无法解析的 OCSP 响应";

/* CSSMERR_APPLETP_OCSP_BAD_REQUEST */ "-2147408864" = "无法解析的 OCSP 请求";

/* CSSMERR_APPLETP_OCSP_UNAVAILABLE */ "-2147408863" = "OCSP 服务不可用";

/* CSSMERR_APPLETP_OCSP_STATUS_UNRECOGNIZED */ "-2147408862" = "OCSP 状态:证书未被识别";

/* CSSMERR_APPLETP_INCOMPLETE_REVOCATION_CHECK */ "-2147408861" = "每个证书的撤消检查均不成功";

/* CSSMERR_APPLETP_NETWORK_FAILURE */ "-2147408860" = "一般网络错误";

/* CSSMERR_APPLETP_OCSP_NOT_TRUSTED */ "-2147408859" = "定位符或根不能验证 OCSP 响应";

/* CSSMERR_APPLETP_OCSP_INVALID_ANCHOR_CERT */ "-2147408858" = "不被信任的根已验证了 OCSP 响应";

/* CSSMERR_APPLETP_OCSP_SIG_ERROR */ "-2147408857" = "OCSP 响应签名错误";

/* CSSMERR_APPLETP_OCSP_NO_SIGNER */ "-2147408856" = "未找到 OCSP 响应的签名者";

/* CSSMERR_APPLETP_OCSP_RESP_MALFORMED_REQ */ "-2147408855" = "OCSP 响应器状态:格式不正确的请求";

/* CSSMERR_APPLETP_OCSP_RESP_INTERNAL_ERR */ "-2147408854" = "OCSP 响应器状态:内部错误";

/* CSSMERR_APPLETP_OCSP_RESP_TRY_LATER */ "-2147408853" = "OCSP 响应器状态:稍后再试";

/* CSSMERR_APPLETP_OCSP_RESP_SIG_REQUIRED */ "-2147408852" = "OCSP 响应器状态:需要签名";

/* CSSMERR_APPLETP_OCSP_RESP_UNAUTHORIZED */ "-2147408851" = "OCSP 响应器状态:未授权";

/* CSSMERR_APPLETP_OCSP_NONCE_MISMATCH */ "-2147408850" = "OCSP 的临时响应与请求不匹配";

/* CSSMERR_APPLETP_CS_BAD_CERT_CHAIN_LENGTH */ "-2147408849" = "代码签名的证书串长度非法";

/* CSSMERR_APPLETP_CS_NO_BASIC_CONSTRAINTS */ "-2147408848" = "代码签名丢失了基本约束";

/* CSSMERR_APPLETP_CS_BAD_PATH_LENGTH */ "-2147408847" = "代码签名的 PathLengthConstraint 错误";  /* CSSMERR_APPLETP_CS_NO_EXTENDED_KEY_USAGE */ "-2147408846" = "代码签名丢失了 ExtendedKeyUsage";  /* CSSMERR_APPLETP_CODE_SIGN_DEVELOPMENT */ "-2147408845" = "已检测到开发风格的代码签名证书";

/* CSSMERR_APPLETP_RS_BAD_CERT_CHAIN_LENGTH */ "-2147408844" = "资源签名的证书串长度非法";

/* CSSMERR_APPLETP_RS_BAD_EXTENDED_KEY_USAGE */ "-2147408843" = "资源签名使用了错误的扩展密钥";

/* CSSMERR_APPLETP_TRUST_SETTING_DENY */ "-2147408842" = "信任设置:拒绝";

/* CSSMERR_APPLETP_INVALID_EMPTY_SUBJECT */ "-2147408841" = "无效的空 SubjectName";

/* CSSMERR_APPLETP_UNKNOWN_QUAL_CERT_STATEMENT */ "-2147408840" = "未知的至关重要的合格证书声明 ID";  /* CSSMERR_APPLE_DOTMAC_REQ_QUEUED */ "-2147408796" = "证书请求已排队";

/* CSSMERR_APPLE_DOTMAC_REQ_REDIRECT */ "-2147408795" = "证书请求被重定向";

/* CSSMERR_APPLE_DOTMAC_REQ_SERVER_ERR */ "-2147408794" = "常规服务器-报告错误";

/* CSSMERR_APPLE_DOTMAC_REQ_SERVER_PARAM */ "-2147408793" = "服务器-报告参数错误";

/* CSSMERR_APPLE_DOTMAC_REQ_SERVER_AUTH */ "-2147408792" = "服务器-报告授权错误";

/* CSSMERR_APPLE_DOTMAC_REQ_SERVER_UNIMPL */ "-2147408791" = "服务器-报告未实现";

/* CSSMERR_APPLE_DOTMAC_REQ_SERVER_NOT_AVAIL */ "-2147408790" = "服务器-报告不可用";

/* CSSMERR_APPLE_DOTMAC_REQ_SERVER_ALREADY_EXIST */ "-2147408789" = "服务器-报告已经存在";

/* CSSMERR_APPLE_DOTMAC_REQ_SERVER_SERVICE_ERROR */ "-2147408788" = "服务器-报告服务错误";

/* CSSMERR_APPLE_DOTMAC_REQ_IS_PENDING */ "-2147408787" = "有请求等待指定的用户处理";

/* CSSMERR_APPLE_DOTMAC_NO_REQ_PENDING */ "-2147408786" = "无请求等待指定的用户处理";

/* CSSMERR_APPLE_DOTMAC_CSR_VERIFY_FAIL */ "-2147408785" = "CSR 验证失败";

/* CSSMERR_APPLE_DOTMAC_FAILED_CONSISTENCY_CHECK */ "-2147408784" = "服务器已报告一致性检查失败";

/* errSecCSUnimplemented */ "-67072" = "未实现的代码签名功能";

/* errSecCSInvalidObjectRef */ "-67071" = "无效的 API 对象引用";

/* errSecCSInvalidFlags */ "-67070" = "指定的 API 标记无效或不合适";

/* errSecCSObjectRequired */ "-67069" = "要求的指针自变量是 NULL";

/* errSecCSStaticCodeNotFound */ "-67068" = "不能在磁盘上找到代码对象";

/* errSecCSUnsupportedGuestAttributes */ "-67067" = "不能找到使用此属性集的客人";

/* errSecCSInvalidAttributeValues */ "-67066" = "给定的属性值无效";

/* errSecCSNoSuchCode */ "-67065" = "主机没有具有所请求属性的客人";

/* errSecCSMultipleGuests */ "-67064" = "主机有多个客人具有此属性值";

/* errSecCSGuestInvalid */ "-67063" = "代码身份已失效";

/* errSecCSUnsigned */ "-67062" = "代码对象未加上签名";

/* errSecCSSignatureFailed */ "-67061" = "代码或签名已被修改";

/* errSecCSSignatureNotVerifiable */ "-67060" = "例如,由于文件系统将根映射到无权限的用户而不能读取签名";  /* errSecCSSignatureUnsupported */ "-67059" = "签名的类型或版本不被支持";

/* errSecCSBadDictionaryFormat */ "-67058" = "需要的 plist 文件或资源的格式不正确";

/* errSecCSResourcesNotSealed */ "-67057" = "资源未被签名所密封";

/* errSecCSResourcesNotFound */ "-67056" = "不能找到代码中的密封资源";

/* errSecCSResourcesInvalid */ "-67055" = "密封资源目录无效";

/* errSecCSBadResource */ "-67054" = "一个密封资源已丢失或无效";

/* errSecCSResourceRulesInvalid */ "-67053" = "无效的资源选择规则";

/* errSecCSReqInvalid */ "-67052" = "代码要求无效或已损坏";

/* errSecCSReqUnsupported */ "-67051" = "代码要求的类型或版本不被支持";

/* errSecCSReqFailed */ "-67050" = "没有满足代码要求";

/* errSecCSBadObjectFormat */ "-67049" = "对象文件格式无效或不合适";

/* errSecCSInternalError */ "-67048" = "代码签名子系统中的内部错误";

/* errSecCSHostReject */ "-67047" = "代码拒绝了其主机";

/* errSecCSNotAHost */ "-67046" = "此代码不是主机代码";

/* errSecCSSignatureInvalid */ "-67045" = "签名的格式无效";

/* errSecCSHostProtocolRelativePath */ "-67044" = "主机协议违例-需要客人的绝对路径";

/* errSecCSHostProtocolContradiction */ "-67043" = "主机协议违例-矛盾的主机模式";

/* errSecCSHostProtocolDedicationError */ "-67042" = "主机协议违例-不允许操作";

/* errSecCSHostProtocolNotProxy */ "-67041" = "主机协议违例-未使用代理主机";

/* errSecCSHostProtocolStateError */ "-67040" = "主机协议违例-客人状态更改的无效请求";

/* errSecCSHostProtocolUnrelated */ "-67039" = "主机协议违例-所指客人并非给顶主机的客人";

/* errSecCSInvalidOperation */ "-67038" = "所请求的操作无效";

/* errSecCSNotSupported */ "-67037" = "此类代码不支持该操作";

/* errSecCSCMSTooLarge */ "-67036" = "签名太大,无法嵌入";

/* errSecMisc_dskFulErr */ "-34" = "磁盘已满。";

/* errSecMisc_nsvErr */ "-35" = "未能找到该磁盘。它可能已被推出。";

/* errSecMisc_bdNamErr */ "-37" = "尝试打开一个名称包含非法字符的文件。";

/* errSecMisc_fnfErr */ "-43" = "找不到该文件。";

/* errSecMisc_wPrErr */ "-44" = "该磁盘已被写保护。";

/* errSecMisc_fLckdErr */ "-45" = "文件被锁定。";

/* errSecMisc_vLckdErr */ "-46" = "该宗卷已锁定。";

/* errSecMisc_fBsyErr */ "-47" = "该文件正忙。可能其他应用程序正在使用它。";

/* errSecMisc_dupFNErr */ "-48" = "已存在有相同名称的文件。";

/* errSecMisc_opWrErr */ "-49" = "该文件已打开,允许写入。";

/* errSecMisc_volOffLinErr */ "-53" = "该宗卷不再可用。它可能已被弹出。";

/* errSecMisc_permErr */ "-54" = "不能打开该文件。它可能正被其他应用程序使用。";

/* errSecMisc_extFSErr */ "-58" = "该宗卷似乎不兼容。";

/* errSecMisc_wrPermErr */ "-61" = "不能写入文件。可能是打开它所使用的访问权限不足。";

/* errSecMisc_offLinErr */ "-65" = "该存储设备不再可用。它可能已被弹出。";

/* errSecMisc_memFullErr */ "-108" = "没有足够内存来执行该操作。";

/* errSecMisc_dirNFErr */ "-120" = "找不到该目录。";

/* errSecMisc_volGoneErr */ "-124" = "该服务器宗卷不再可用。它可能已断开连接。";

/* errSecMisc_userCanceledErr */ "-128" = "该操作已被用户取消。";

/* errSecMisc_resNotFound */ "-192" = "找不到需要的资源。";

/* errSecMisc_resFNotFound */ "-193" = "需要的资源已丢失或损坏。";

/* errSecMisc_icNoURLErr */ "-673" = "指定位置 (URL) 的类型未知,或没有包含足够的信息。";

2013年4月18日 星期四

git 小技巧(持續編輯中

// 指令參考網頁

http://blog.longwin.com.tw/2009/05/git-learn-initial-command-2009/

http://zensheno.blog.51cto.com/2712776/490748

快速清除已刪除的文件

git diff --diff-filter=D --name-only -z | xargs -0 git rm

清除沒有被忽略的 xcuserdata

git rm --cached ProjectFolder.xcodeproj/project.xcworkspace/xcuserdata/myUserName.xcuserdatad/UserInterfaceState.xcuserstate

git commit -m "Removed file that shouldn't be tracked"

快速加入變更或新增的文件

git add .

加入有變更的文件

git add -u

產生 log 資料

git log --since=2013-4-23 --pretty=format:"時間%cd 內容:%s "

做成 log 檔案 (檔案名稱記得加到 ignore 中)

git log --since=2013-4-23 --pretty=format:"時間%cd 內容:%s " > commit.log

2013年4月16日 星期二

iPhone 模擬位置

開發 iPhone 時

可以從 product -> Debug -> Simulate Location 模擬位置

以下是給忘記這設定,以為 iphone 亂掉的開發者之關鍵字..

iphone 開發, Xcode, iphone 位置 固定在時代廣場 亂掉

2013年4月7日 星期日

git Permission denied, 遺失 RSA

認真來說,不算是遺失

應該是失去關聯

上週不知道發生了什麼事情

本來可以用的 git 設定忽然不能用了

使用 git push,會出現

Permission denied (publickey).

fatal: Could not read from remote repository.

Please make sure you have the correct access rights

and the repository exists.

這問題直接原因是因為 git 找不到 public key 用來建立連結

不過 ~/.ssh 下面的 xxx_rsa/xxx_rsa_pub 檔案都在原地沒有改變

所以整個情況變得很詭異..

最後還是找不到原因

就在 ~/.ssh 下面,使用 ssh-add xxx_rsa 建立 key 關聯性就算了..

以後有空再來研究

iphone 5 圖片命名方案

#define isPhone568 ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone && [UIScreen mainScreen].bounds.size.height == 568)

#define iPhone568ImageNamed(image) (isPhone568 ? [NSString stringWithFormat:@"%@-568h.%@", [image stringByDeletingPathExtension], [image pathExtension]] : image)

#define iPhone568Image(image) ([UIImage imageNamed:iPhone568ImageNamed(image)])

from http://stackoverflow.com/questions/12519110/what-to-name-images-for-iphone-5-screen-size

之後 iphone 5 用的圖片設定 xxx-568h@2x.xxx 即可

僅限 coding, IB 端並不適用(某些設計師請別再以為用滑鼠拉一拉就可以換所有圖了..這並不是 word..,就跟你們畫圖時用的工具不是小畫家一樣

2013年4月4日 星期四

cocoapods 小記

參考資料

http://cocoapods.org/

http://blog.devtang.com/blog/2012/12/02/use-cocoapod-to-manage-ios-lib-dependency/

自訂 component

http://i.ndigo.com.br/2012/04/using-cocoapods-for-in-house-components/

安裝 cocoapods

使用 gem (mac 自帶

gen imstall cocoapods

pod setup // 安裝 pod, 會建立 ~/.cocoapods 目錄

建立 Podfile

# 註解

platform :ios, '5.1' #目標版本

pod 'JSONKit', '~> 1.4' #指定版本

pod 'Reachability', '~> 3.0.0'

pod 'ASIHTTPRequest'

pod 'RegexKitLite'

安裝 library

pod install

新增 library

使用 pod install 重新安裝(建議把 Xcode 關閉

如果是 library 有更新

使用 pod update

搜尋支援的 library

pod search #name

建立 pod library

pod spec create Peanut

edit Peanut.podspec

pod spec lint Peanut.podspec

指令說明

pod install // 根據 Podfile 安裝 library

pod list // 列出 cocoapods 支援的 lib

pod outdated //列出目前有使用但非最新版本的 lib

pod push // 進階指令,更新 podsepc 用

pod repo

        pod repo add NAME URK [BRANCH] //抓取 URL 的 repo,指定為 NAME,clone 到本地

        pod repo update NAME //從遠端 repo 更新指定為 NAME 的本地 repo

        pod repo lint [NAME | DIRECTORY] // lint

pod search // 搜尋cocoapods 支援的 lib

pod setup //

pod spec //

pod update //更新 lib