xps进bios
2013-09-29 16:43:14 langyuejing 阅读数 966

遇到的错误的是

1:对不起,你的站点在新浪微博认证失败,请于XXX联系。。。。。

解决:根据文档提示 去回调地址的那里填写   新浪开发平台-》应用信息-》高级信息-》填写-》授权回调页 和取消授权回调页

2:授权后,出现一个白板页面,页面上显示,新浪微博。。。

解决:Xcode 中的bundle identifier 填写 可能有误,手敲一次吧

1.在info.plist文件里增加url types,在url schems里填上wbXXXX(AppKey)


2.确保SDK中设置的redirect_uri与新浪微博开放平台中设置的相同(相同即可,是什么无所谓)


3.确保应用的bundle id(info.plist中的)与新浪微博开放平台中(应用基本信息里)设置的相同

在编译IOS新浪SDK的时候,出现了此错误:


解决:在Xcode 5中 项目的build setting 中 修改 Architectures  中选择armv7,armv7s 即可解决问题 

后续遇到再添。。。。 哈哈


2016-05-30 17:32:00 weixin_33738555 阅读数 14
  1.   CoreAnimationEffect.h  
  2. //  CoreAnimationEffect  
  3. //  
  4. //  Created by VincentXue on 13-1-19.  
  5. //  Copyright (c) 2013年 VincentXue. All rights reserved.  
  6. //  
  7.    
  8. #import <Foundation/Foundation.h>  
  9.    
  10. /**  
  11.  !  导入QuartzCore.framework  
  12.  *  
  13.  *  Example:  
  14.  *  
  15.  *  Step.1  
  16.  *  
  17.  *      #import "CoreAnimationEffect.h"  
  18.  *  
  19.  *  Step.2  
  20.  *  
  21.  *      [CoreAnimationEffect animationMoveLeft:your view];  
  22.  *   
  23.  */  
  24.    
  25.    
  26. @interface CoreAnimationEffect : NSObject  
  27.    
  28. #pragma mark - Custom Animation  
  29.    
  30. /**  
  31.  *   @brief 快速构建一个你自定义的动画,有以下参数供你设置.  
  32.  *  
  33.  *   @note  调用系统预置Type需要在调用类引入下句  
  34.  *  
  35.  *          #import <QuartzCore/QuartzCore.h>  
  36.  *  
  37.  *   @param type                动画过渡类型  
  38.  *   @param subType             动画过渡方向(子类型)  
  39.  *   @param duration            动画持续时间  
  40.  *   @param timingFunction      动画定时函数属性  
  41.  *   @param theView             需要添加动画的view.  
  42.  *  
  43.  *  
  44.  */  
  45.    
  46. + (void)showAnimationType:(NSString *)type  
  47.               withSubType:(NSString *)subType  
  48.                  duration:(CFTimeInterval)duration  
  49.            timingFunction:(NSString *)timingFunction  
  50.                      view:(UIView *)theView;  
  51.    
  52. #pragma mark - Preset Animation  
  53.    
  54. /**  
  55.  *  下面是一些常用的动画效果  
  56.  */  
  57.    
  58. // reveal  
  59. + (void)animationRevealFromBottom:(UIView *)view;  
  60. + (void)animationRevealFromTop:(UIView *)view;  
  61. + (void)animationRevealFromLeft:(UIView *)view;  
  62. + (void)animationRevealFromRight:(UIView *)view;  
  63.    
  64. // 渐隐渐消  
  65. + (void)animationEaseIn:(UIView *)view;  
  66. + (void)animationEaseOut:(UIView *)view;  
  67.    
  68. // 翻转  
  69. + (void)animationFlipFromLeft:(UIView *)view;  
  70. + (void)animationFlipFromRigh:(UIView *)view;  
  71.    
  72. // 翻页  
  73. + (void)animationCurlUp:(UIView *)view;  
  74. + (void)animationCurlDown:(UIView *)view;  
  75.    
  76. // push  
  77. + (void)animationPushUp:(UIView *)view;  
  78. + (void)animationPushDown:(UIView *)view;  
  79. + (void)animationPushLeft:(UIView *)view;  
  80. + (void)animationPushRight:(UIView *)view;  
  81.    
  82. // move  
  83. + (void)animationMoveUp:(UIView *)view duration:(CFTimeInterval)duration;  
  84. + (void)animationMoveDown:(UIView *)view duration:(CFTimeInterval)duration;  
  85. + (void)animationMoveLeft:(UIView *)view;  
  86. + (void)animationMoveRight:(UIView *)view;  
  87.    
  88. // 旋转缩放  
  89.    
  90. // 各种旋转缩放效果  
  91. + (void)animationRotateAndScaleEffects:(UIView *)view;  
  92.    
  93. // 旋转同时缩小放大效果  
  94. + (void)animationRotateAndScaleDownUp:(UIView *)view;  
  95.    
  96.    
  97.    
  98. #pragma mark - Private API  
  99.    
  100. /**  
  101.  *  下面动画里用到的某些属性在当前API里是不合法的,但是也可以用.  
  102.  */  
  103.    
  104. + (void)animationFlipFromTop:(UIView *)view;  
  105. + (void)animationFlipFromBottom:(UIView *)view;  
  106.    
  107. + (void)animationCubeFromLeft:(UIView *)view;  
  108. + (void)animationCubeFromRight:(UIView *)view;  
  109. + (void)animationCubeFromTop:(UIView *)view;  
  110. + (void)animationCubeFromBottom:(UIView *)view;  
  111.    
  112. + (void)animationSuckEffect:(UIView *)view;  
  113.    
  114. + (void)animationRippleEffect:(UIView *)view;  
  115.    
  116. + (void)animationCameraOpen:(UIView *)view;  
  117. + (void)animationCameraClose:(UIView *)view;  
  118.    
  119. @end  
  120.    
  121.    
  122.    
  123. //  
  124. //  CoreAnimationEffect.m  
  125. //  CoreAnimationEffect  
  126. //  
  127. //  Created by VincentXue on 13-1-19.  
  128. //  Copyright (c) 2013年 VincentXue. All rights reserved.  
  129. //  
  130.    
  131. #import "CoreAnimationEffect.h"  
  132.    
  133. #import <QuartzCore/QuartzCore.h>  
  134.    
  135. @implementation CoreAnimationEffect  
  136.    
  137. /**  
  138.  *  首先推荐一个不错的网站.   http://www.raywenderlich.com  
  139.  */  
  140.    
  141. #pragma mark - Custom Animation  
  142.    
  143. + (void)showAnimationType:(NSString *)type  
  144.               withSubType:(NSString *)subType  
  145.                  duration:(CFTimeInterval)duration  
  146.            timingFunction:(NSString *)timingFunction  
  147.                      view:(UIView *)theView  
  148. {  
  149.     /** CATransition  
  150.      *  
  151.      *  @see http://www.dreamingwish.com/dream-2012/the-concept-of-coreanimation-programming-guide.html  
  152.      *  @see http://geeklu.com/2012/09/animation-in-ios/  
  153.      *  
  154.      *  CATransition 常用设置及属性注解如下:  
  155.      */  
  156.    
  157.     CATransition *animation = [CATransition animation];  
  158.        
  159.     /** delegate  
  160.      *  
  161.      *  动画的代理,如果你想在动画开始和结束的时候做一些事,可以设置此属性,它会自动回调两个代理方法.  
  162.      *  
  163.      *  @see CAAnimationDelegate    (按下command键点击)  
  164.      */  
  165.        
  166.     animation.delegate = self;  
  167.        
  168.     /** duration  
  169.      *  
  170.      *  动画持续时间  
  171.      */  
  172.        
  173.     animation.duration = duration;  
  174.        
  175.     /** timingFunction  
  176.      *  
  177.      *  用于变化起点和终点之间的插值计算,形象点说它决定了动画运行的节奏,比如是均匀变化(相同时间变化量相同)还是  
  178.      *  先快后慢,先慢后快还是先慢再快再慢.  
  179.      *  
  180.      *  动画的开始与结束的快慢,有五个预置分别为(下同):  
  181.      *  kCAMediaTimingFunctionLinear            线性,即匀速  
  182.      *  kCAMediaTimingFunctionEaseIn            先慢后快  
  183.      *  kCAMediaTimingFunctionEaseOut           先快后慢  
  184.      *  kCAMediaTimingFunctionEaseInEaseOut     先慢后快再慢  
  185.      *  kCAMediaTimingFunctionDefault           实际效果是动画中间比较快.  
  186.      */  
  187.        
  188.     /** timingFunction  
  189.      *  
  190.      *  当上面的预置不能满足你的需求的时候,你可以使用下面的两个方法来自定义你的timingFunction  
  191.      *  具体参见下面的URL  
  192.      *  
  193.      *  @see http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/CAMediaTimingFunction_class/Introduction/Introduction.html  
  194.      *  
  195.      *  + (id)functionWithControlPoints:(float)c1x :(float)c1y :(float)c2x :(float)c2y;  
  196.      *  
  197.      *  - (id)initWithControlPoints:(float)c1x :(float)c1y :(float)c2x :(float)c2y;  
  198.      */  
  199.        
  200.     animation.timingFunction = [CAMediaTimingFunction functionWithName:timingFunction];  
  201.        
  202.     /** fillMode  
  203.      *  
  204.      *  决定当前对象过了非active时间段的行为,比如动画开始之前,动画结束之后.  
  205.      *  预置为:  
  206.      *  kCAFillModeRemoved   默认,当动画开始前和动画结束后,动画对layer都没有影响,动画结束后,layer会恢复到之前的状态  
  207.      *  kCAFillModeForwards  当动画结束后,layer会一直保持着动画最后的状态  
  208.      *  kCAFillModeBackwards 和kCAFillModeForwards相对,具体参考上面的URL  
  209.      *  kCAFillModeBoth      kCAFillModeForwards和kCAFillModeBackwards在一起的效果  
  210.      */  
  211.        
  212.     animation.fillMode = kCAFillModeForwards;  
  213.        
  214.     /** removedOnCompletion  
  215.      *  
  216.      *  这个属性默认为YES.一般情况下,不需要设置这个属性.  
  217.      *  
  218.      *  但如果是CAAnimation动画,并且需要设置 fillMode 属性,那么需要将 removedOnCompletion 设置为NO,否则  
  219.      *  fillMode无效  
  220.      */  
  221.        
  222. //    animation.removedOnCompletion = NO;  
  223.        
  224.     /** type  
  225.      *  
  226.      *  各种动画效果  其中除了'fade', `moveIn', `push' , `reveal' ,其他属于似有的API(我是这么认为的,可以点进去看下注释).  
  227.      *  ↑↑↑上面四个可以分别使用'kCATransitionFade', 'kCATransitionMoveIn', 'kCATransitionPush', 'kCATransitionReveal'来调用.  
  228.      *  @"cube"                     立方体翻滚效果  
  229.      *  @"moveIn"                   新视图移到旧视图上面  
  230.      *  @"reveal"                   显露效果(将旧视图移开,显示下面的新视图)  
  231.      *  @"fade"                     交叉淡化过渡(不支持过渡方向)             (默认为此效果)  
  232.      *  @"pageCurl"                 向上翻一页  
  233.      *  @"pageUnCurl"               向下翻一页  
  234.      *  @"suckEffect"               收缩效果,类似系统最小化窗口时的神奇效果(不支持过渡方向)  
  235.      *  @"rippleEffect"             滴水效果,(不支持过渡方向)  
  236.      *  @"oglFlip"                  上下左右翻转效果  
  237.      *  @"rotate"                   旋转效果  
  238.      *  @"push"                      
  239.      *  @"cameraIrisHollowOpen"     相机镜头打开效果(不支持过渡方向)  
  240.      *  @"cameraIrisHollowClose"    相机镜头关上效果(不支持过渡方向)  
  241.      */  
  242.        
  243.     /** type  
  244.      *  
  245.      *  kCATransitionFade            交叉淡化过渡  
  246.      *  kCATransitionMoveIn          新视图移到旧视图上面  
  247.      *  kCATransitionPush            新视图把旧视图推出去  
  248.      *  kCATransitionReveal          将旧视图移开,显示下面的新视图  
  249.      */  
  250.        
  251.     animation.type = type;  
  252.        
  253.     /** subtype  
  254.      *  
  255.      *  各种动画方向  
  256.      *  
  257.      *  kCATransitionFromRight;      同字面意思(下同)  
  258.      *  kCATransitionFromLeft;  
  259.      *  kCATransitionFromTop;  
  260.      *  kCATransitionFromBottom;  
  261.      */  
  262.        
  263.     /** subtype  
  264.      *  
  265.      *  当type为@"rotate"(旋转)的时候,它也有几个对应的subtype,分别为:  
  266.      *  90cw    逆时针旋转90°  
  267.      *  90ccw   顺时针旋转90°  
  268.      *  180cw   逆时针旋转180°  
  269.      *  180ccw  顺时针旋转180°  
  270.      */  
  271.        
  272.     /**  
  273.      *  type与subtype的对应关系(必看),如果对应错误,动画不会显现.  
  274.      *  
  275.      *  @see http://iphonedevwiki.net/index.php/CATransition  
  276.      */  
  277.        
  278.     animation.subtype = subType;  
  279.        
  280.     /**  
  281.      *  所有核心动画和特效都是基于CAAnimation,而CAAnimation是作用于CALayer的.所以把动画添加到layer上.  
  282.      *  forKey  可以是任意字符串.  
  283.      */  
  284.        
  285.     [theView.layer addAnimation:animation forKey:nil];  
  286. }  
  287.    
  288. #pragma mark - Preset Animation  
  289.    
  290.    
  291. + (void)animationRevealFromBottom:(UIView *)view  
  292. {  
  293.     CATransition *animation = [CATransition animation];  
  294.     [animation setDuration:0.35f];  
  295.     [animation setType:kCATransitionReveal];  
  296.     [animation setSubtype:kCATransitionFromBottom];  
  297.     [animation setFillMode:kCAFillModeForwards];  
  298.     [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];  
  299.        
  300.     [view.layer addAnimation:animation forKey:nil];  
  301. }  
  302.    
  303. + (void)animationRevealFromTop:(UIView *)view  
  304. {  
  305.     CATransition *animation = [CATransition animation];  
  306.     [animation setDuration:0.35f];  
  307.     [animation setType:kCATransitionReveal];  
  308.     [animation setSubtype:kCATransitionFromTop];  
  309.     [animation setFillMode:kCAFillModeForwards];  
  310.     [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];  
  311.        
  312.     [view.layer addAnimation:animation forKey:nil];  
  313. }  
  314.    
  315. + (void)animationRevealFromLeft:(UIView *)view  
  316. {  
  317.     CATransition *animation = [CATransition animation];  
  318.     [animation setDuration:0.35f];  
  319.     [animation setType:kCATransitionReveal];  
  320.     [animation setSubtype:kCATransitionFromLeft];  
  321.     [animation setFillMode:kCAFillModeForwards];  
  322.     [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];  
  323.        
  324.     [view.layer addAnimation:animation forKey:nil];  
  325. }  
  326.    
  327. + (void)animationRevealFromRight:(UIView *)view  
  328. {  
  329.     CATransition *animation = [CATransition animation];  
  330.     [animation setDuration:0.35f];  
  331.     [animation setType:kCATransitionReveal];  
  332.     [animation setSubtype:kCATransitionFromRight];  
  333.     [animation setFillMode:kCAFillModeForwards];  
  334.     [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];  
  335.        
  336.     [view.layer addAnimation:animation forKey:nil];  
  337. }  
  338.    
  339.    
  340. + (void)animationEaseIn:(UIView *)view  
  341. {  
  342.     CATransition *animation = [CATransition animation];  
  343.     [animation setDuration:0.35f];  
  344.     [animation setType:kCATransitionFade];  
  345.     [animation setFillMode:kCAFillModeForwards];  
  346.     [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];  
  347.        
  348.     [view.layer addAnimation:animation forKey:nil];  
  349. }  
  350.    
  351. + (void)animationEaseOut:(UIView *)view  
  352. {  
  353.     CATransition *animation = [CATransition animation];  
  354.     [animation setDuration:0.35f];  
  355.     [animation setType:kCATransitionFade];  
  356.     [animation setFillMode:kCAFillModeForwards];  
  357.     [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];  
  358.        
  359.     [view.layer addAnimation:animation forKey:nil];  
  360. }  
  361.    
  362.    
  363. /**  
  364.  *  UIViewAnimation  
  365.  *  
  366.  *  @see    http://www.cocoachina.com/bbs/read.php?tid=110168  
  367.  *  
  368.  *  @brief  UIView动画应该是最简单便捷创建动画的方式了,详解请猛戳URL.  
  369.  *   
  370.  *  @method beginAnimations:context 第一个参数用来作为动画的标识,第二个参数给代理代理传递消息.至于为什么一个使用  
  371.  *                                  nil而另外一个使用NULL,是因为第一个参数是一个对象指针,而第二个参数是基本数据类型.  
  372.  *  @method setAnimationCurve:      设置动画的加速或减速的方式(速度)  
  373.  *  @method setAnimationDuration:   动画持续时间  
  374.  *  @method setAnimationTransition:forView:cache:   第一个参数定义动画类型,第二个参数是当前视图对象,第三个参数是是否使用缓冲区  
  375.  *  @method commitAnimations        动画结束  
  376.  */  
  377.    
  378. + (void)animationFlipFromLeft:(UIView *)view  
  379. {  
  380.     [UIView beginAnimations:nil context:NULL];  
  381.     [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];  
  382.     [UIView setAnimationDuration:0.35f];  
  383.     [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:view cache:NO];  
  384.     [UIView commitAnimations];  
  385. }  
  386.    
  387. + (void)animationFlipFromRigh:(UIView *)view  
  388. {  
  389.     [UIView beginAnimations:nil context:NULL];  
  390.     [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];  
  391.     [UIView setAnimationDuration:0.35f];  
  392.     [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:view cache:NO];  
  393.     [UIView commitAnimations];  
  394. }  
  395.    
  396.    
  397. + (void)animationCurlUp:(UIView *)view  
  398. {  
  399.     [UIView beginAnimations:nil context:NULL];  
  400.     [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];  
  401.     [UIView setAnimationDuration:0.35f];  
  402.     [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:view cache:NO];  
  403.     [UIView commitAnimations];  
  404. }  
  405.    
  406. + (void)animationCurlDown:(UIView *)view  
  407. {  
  408.     [UIView beginAnimations:nil context:NULL];  
  409.     [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];  
  410.     [UIView setAnimationDuration:0.35f];  
  411.     [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:view cache:NO];  
  412.     [UIView commitAnimations];  
  413. }  
  414.    
  415. + (void)animationPushUp:(UIView *)view  
  416. {  
  417.     CATransition *animation = [CATransition animation];  
  418.     [animation setDuration:0.35f];  
  419.     [animation setFillMode:kCAFillModeForwards];  
  420.     [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];  
  421.     [animation setType:kCATransitionPush];  
  422.     [animation setSubtype:kCATransitionFromTop];  
  423.        
  424.     [view.layer addAnimation:animation forKey:nil];  
  425. }  
  426.    
  427. + (void)animationPushDown:(UIView *)view  
  428. {  
  429.     CATransition *animation = [CATransition animation];  
  430.     [animation setDuration:0.35f];  
  431.     [animation setFillMode:kCAFillModeForwards];  
  432.     [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];  
  433.     [animation setType:kCATransitionPush];  
  434.     [animation setSubtype:kCATransitionFromBottom];  
  435.        
  436.     [view.layer addAnimation:animation forKey:nil];  
  437. }  
  438.    
  439. + (void)animationPushLeft:(UIView *)view  
  440. {  
  441.     CATransition *animation = [CATransition animation];  
  442.     [animation setDuration:0.35f];  
  443.     [animation setFillMode:kCAFillModeForwards];  
  444.     [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];  
  445.     [animation setType:kCATransitionPush];  
  446.     [animation setSubtype:kCATransitionFromLeft];  
  447.        
  448.     [view.layer addAnimation:animation forKey:nil];  
  449. }  
  450.    
  451. + (void)animationPushRight:(UIView *)view  
  452. {  
  453.     CATransition *animation = [CATransition animation];  
  454.     [animation setDuration:0.35f];  
  455.     [animation setFillMode:kCAFillModeForwards];  
  456.     [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];  
  457.     [animation setType:kCATransitionPush];  
  458.     [animation setSubtype:kCATransitionFromRight];  
  459.        
  460.     [view.layer addAnimation:animation forKey:nil];  
  461. }  
  462.    
  463. // presentModalViewController  
  464. + (void)animationMoveUp:(UIView *)view duration:(CFTimeInterval)duration  
  465. {  
  466.     CATransition *animation = [CATransition animation];  
  467.     [animation setDuration:duration];  
  468.     [animation setFillMode:kCAFillModeForwards];  
  469.     [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];  
  470.     [animation setType:kCATransitionMoveIn];  
  471.     [animation setSubtype:kCATransitionFromTop];  
  472.        
  473.     [view.layer addAnimation:animation forKey:nil];  
  474. }  
  475.    
  476. // dissModalViewController  
  477. + (void)animationMoveDown:(UIView *)view duration:(CFTimeInterval)duration  
  478. {  
  479.     CATransition *transition = [CATransition animation];  
  480.     transition.duration =0.4;  
  481.     transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];  
  482.     transition.type = kCATransitionReveal;  
  483.     transition.subtype = kCATransitionFromBottom;  
  484.     [view.layer addAnimation:transition forKey:nil];  
  485. }  
  486.    
  487. + (void)animationMoveLeft:(UIView *)view  
  488. {  
  489.     CATransition *animation = [CATransition animation];  
  490.     [animation setDuration:0.35f];  
  491.     [animation setFillMode:kCAFillModeForwards];  
  492.     [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];  
  493.     [animation setType:kCATransitionMoveIn];  
  494.     [animation setSubtype:kCATransitionFromLeft];  
  495.        
  496.     [view.layer addAnimation:animation forKey:nil];  
  497. }  
  498.    
  499. + (void)animationMoveRight:(UIView *)view  
  500. {  
  501.     CATransition *animation = [CATransition animation];  
  502.     [animation setDuration:0.35f];  
  503.     [animation setFillMode:kCAFillModeForwards];  
  504.     [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];  
  505.     [animation setType:kCATransitionMoveIn];  
  506.     [animation setSubtype:kCATransitionFromRight];  
  507.        
  508.     [view.layer addAnimation:animation forKey:nil];  
  509. }  
  510.    
  511. +(void)animationRotateAndScaleEffects:(UIView *)view  
  512. {  
  513.     [UIView animateWithDuration:0.35f animations:^  
  514.      {  
  515.          /**  
  516.           *  @see       http://donbe.blog.163.com/blog/static/138048021201061054243442/  
  517.           *  
  518.           *  @param     transform   形变属性(结构体),可以利用这个属性去对view做一些翻转或者缩放.详解请猛戳↑URL.  
  519.           *  
  520.           *  @method    valueWithCATransform3D: 此方法需要一个CATransform3D的结构体.一些非详细的讲解可以看下面的URL  
  521.           *  
  522.           *  @see       http://blog.csdn.net/liubo0_0/article/details/7452166  
  523.           *  
  524.           */  
  525.             
  526.          view.transform = CGAffineTransformMakeScale(0.001, 0.001);  
  527.             
  528.          CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform"];  
  529.             
  530.          // 向右旋转45°缩小到最小,然后再从小到大推出.  
  531.          animation.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 0.70, 0.40, 0.80)];  
  532.             
  533.          /**  
  534.           *     其他效果:  
  535.           *     从底部向上收缩一半后弹出  
  536.           *     animation.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 0.0, 1.0, 0.0)];  
  537.           *  
  538.           *     从底部向上完全收缩后弹出  
  539.           *     animation.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 1.0, 0.0, 0.0)];  
  540.           *  
  541.           *     左旋转45°缩小到最小,然后再从小到大推出.  
  542.           *     animation.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 0.50, -0.50, 0.50)];  
  543.           *  
  544.           *     旋转180°缩小到最小,然后再从小到大推出.  
  545.           *     animation.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 0.1, 0.2, 0.2)];  
  546.           */  
  547.             
  548.          animation.duration = 0.45;  
  549.          animation.repeatCount = 1;  
  550.          [view.layer addAnimation:animation forKey:nil];  
  551.             
  552.      }  
  553.                      completion:^(BOOL finished)  
  554.      {  
  555.          [UIView animateWithDuration:0.35f animations:^  
  556.           {  
  557.               view.transform = CGAffineTransformMakeScale(1.0, 1.0);  
  558.           }];  
  559.      }];  
  560. }  
  561.    
  562. /** CABasicAnimation  
  563.  *  
  564.  *  @see https://developer.apple.com/library/mac/#documentation/cocoa/conceptual/CoreAnimation_guide/Articles/KVCAdditions.html  
  565.  *  
  566.  *  @brief                      便利构造函数 animationWithKeyPath: KeyPath需要一个字符串类型的参数,实际上是一个  
  567.  *                              键-值编码协议的扩展,参数必须是CALayer的某一项属性,你的代码会对应的去改变该属性的效果  
  568.  *                              具体可以填写什么请参考上面的URL,切勿乱填!  
  569.  *                              例如这里填写的是 @"transform.rotation.z" 意思就是围绕z轴旋转,旋转的单位是弧度.  
  570.  *                              这个动画的效果是把view旋转到最小,再旋转回来.  
  571.  *                              你也可以填写@"opacity" 去修改透明度...以此类推.修改layer的属性,可以用这个类.  
  572.  *  
  573.  *  @param toValue              动画结束的值.CABasicAnimation自己只有三个属性(都很重要)(其他属性是继承来的),分别为:  
  574.  *                              fromValue(开始值), toValue(结束值), byValue(偏移值),  
  575.  !                              这三个属性最多只能同时设置两个;  
  576.  *                              他们之间的关系如下:  
  577.  *                              如果同时设置了fromValue和toValue,那么动画就会从fromValue过渡到toValue;  
  578.  *                              如果同时设置了fromValue和byValue,那么动画就会从fromValue过渡到fromValue + byValue;  
  579.  *                              如果同时设置了byValue  和toValue,那么动画就会从toValue - byValue过渡到toValue;  
  580.  *  
  581.  *                              如果只设置了fromValue,那么动画就会从fromValue过渡到当前的value;  
  582.  *                              如果只设置了toValue  ,那么动画就会从当前的value过渡到toValue;  
  583.  *                              如果只设置了byValue  ,那么动画就会从从当前的value过渡到当前value + byValue.  
  584.  *  
  585.  *                              可以这么理解,当你设置了三个中的一个或多个,系统就会根据以上规则使用插值算法计算出一个时间差并  
  586.  *                              同时开启一个Timer.Timer的间隔也就是这个时间差,通过这个Timer去不停地刷新keyPath的值.  
  587.  !                              而实际上,keyPath的值(layer的属性)在动画运行这一过程中,是没有任何变化的,它只是调用了GPU去  
  588.  *                              完成这些显示效果而已.  
  589.  *                              在这个动画里,是设置了要旋转到的弧度,根据以上规则,动画将会从它当前的弧度专旋转到我设置的弧度.  
  590.  *  
  591.  *  @param duration             动画持续时间  
  592.  *  
  593.  *  @param timingFunction       动画起点和终点之间的插值计算,也就是说它决定了动画运行的节奏,是快还是慢,还是先快后慢...  
  594.  */  
  595.    
  596. /** CAAnimationGroup  
  597.  *  
  598.  *  @brief                      顾名思义,这是一个动画组,它允许多个动画组合在一起并行显示.比如这里设置了两个动画,  
  599.  *                              把他们加在动画组里,一起显示.例如你有几个动画,在动画执行的过程中需要同时修改动画的某些属性,  
  600.  *                              这时候就可以使用CAAnimationGroup.  
  601.  *  
  602.  *  @param duration             动画持续时间,值得一提的是,如果添加到group里的子动画不设置此属性,group里的duration会统一  
  603.  *                              设置动画(包括子动画)的duration属性;但是如果子动画设置了duration属性,那么group的duration属性  
  604.  *                              的值不应该小于每个子动画中duration属性的值,否则会造成子动画显示不全就停止了动画.  
  605.  *  
  606.  *  @param autoreverses         动画完成后自动重新开始,默认为NO.  
  607.  *  
  608.  *  @param repeatCount          动画重复次数,默认为0.  
  609.  *  
  610.  *  @param animations           动画组(数组类型),把需要同时运行的动画加到这个数组里.  
  611.  *  
  612.  *  @note  addAnimation:forKey  这个方法的forKey参数是一个字符串,这个字符串可以随意设置.  
  613.  *  
  614.  *  @note                       如果你需要在动画group执行结束后保存动画效果的话,设置 fillMode 属性,并且把  
  615.  *                              removedOnCompletion 设置为NO;  
  616.  */  
  617.    
  618. + (void)animationRotateAndScaleDownUp:(UIView *)view  
  619. {  
  620.     CABasicAnimation *rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];  
  621.  rotationAnimation.toValue = [NSNumber numberWithFloat:(2 * M_PI) * 2];  
  622.  rotationAnimation.duration = 0.35f;  
  623.  rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];  
  624.        
  625.  CABasicAnimation *scaleAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];  
  626.  scaleAnimation.toValue = [NSNumber numberWithFloat:0.0];  
  627.  scaleAnimation.duration = 0.35f;  
  628.  scaleAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];  
  629.     
  630.  CAAnimationGroup *animationGroup = [CAAnimationGroup animation];  
  631.  animationGroup.duration = 0.35f;  
  632.  animationGroup.autoreverses = YES;  
  633.  animationGroup.repeatCount = 1;  
  634.  animationGroup.animations =[NSArray arrayWithObjects:rotationAnimation, scaleAnimation, nil];  
  635.  [view.layer addAnimation:animationGroup forKey:@"animationGroup"];  
  636. }  
  637.    
  638.    
  639.    
  640. #pragma mark - Private API  
  641.    
  642. + (void)animationFlipFromTop:(UIView *)view  
  643. {  
  644.     CATransition *animation = [CATransition animation];  
  645.     [animation setDuration:0.35f];  
  646.     [animation setFillMode:kCAFillModeForwards];  
  647.     [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];  
  648.     [animation setType:@"oglFlip"];  
  649.     [animation setSubtype:@"fromTop"];  
  650.        
  651.     [view.layer addAnimation:animation forKey:nil];  
  652. }  
  653.    
  654. + (void)animationFlipFromBottom:(UIView *)view  
  655. {  
  656.     CATransition *animation = [CATransition animation];  
  657.     [animation setDuration:0.35f];  
  658.     [animation setFillMode:kCAFillModeForwards];  
  659.     [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];  
  660.     [animation setType:@"oglFlip"];  
  661.     [animation setSubtype:@"fromBottom"];  
  662.        
  663.     [view.layer addAnimation:animation forKey:nil];  
  664. }  
  665.    
  666. + (void)animationCubeFromLeft:(UIView *)view  
  667. {  
  668.     CATransition *animation = [CATransition animation];  
  669.     [animation setDuration:0.35f];  
  670.     [animation setFillMode:kCAFillModeForwards];  
  671.     [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];  
  672.     [animation setType:@"cube"];  
  673.     [animation setSubtype:@"fromLeft"];  
  674.        
  675.     [view.layer addAnimation:animation forKey:nil];  
  676. }  
  677.    
  678. + (void)animationCubeFromRight:(UIView *)view  
  679. {  
  680.     CATransition *animation = [CATransition animation];  
  681.     [animation setDuration:0.35f];  
  682.     [animation setFillMode:kCAFillModeForwards];  
  683.     [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];  
  684.     [animation setType:@"cube"];  
  685.     [animation setSubtype:@"fromRight"];  
  686.        
  687.     [view.layer addAnimation:animation forKey:nil];  
  688. }  
  689.    
  690. + (void)animationCubeFromTop:(UIView *)view  
  691. {  
  692.     CATransition *animation = [CATransition animation];  
  693.     [animation setDuration:0.35f];  
  694.     [animation setFillMode:kCAFillModeForwards];  
  695.     [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];  
  696.     [animation setType:@"cube"];  
  697.     [animation setSubtype:@"fromTop"];  
  698.        
  699.     [view.layer addAnimation:animation forKey:nil];  
  700. }  
  701.    
  702. + (void)animationCubeFromBottom:(UIView *)view  
  703. {  
  704.     CATransition *animation = [CATransition animation];  
  705.     [animation setDuration:0.35f];  
  706.     [animation setFillMode:kCAFillModeForwards];  
  707.     [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];  
  708.     [animation setType:@"cube"];  
  709.     [animation setSubtype:@"fromBottom"];  
  710.        
  711.     [view.layer addAnimation:animation forKey:nil];  
  712. }  
  713.    
  714. + (void)animationSuckEffect:(UIView *)view  
  715. {  
  716.     CATransition *animation = [CATransition animation];  
  717.     [animation setDuration:0.35f];  
  718.     [animation setFillMode:kCAFillModeForwards];  
  719.     [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];  
  720.     [animation setType:@"suckEffect"];  
  721.        
  722.     [view.layer addAnimation:animation forKey:nil];  
  723. }  
  724.    
  725. + (void)animationRippleEffect:(UIView *)view  
  726. {  
  727.     CATransition *animation = [CATransition animation];  
  728.     [animation setDuration:0.35f];  
  729.     [animation setFillMode:kCAFillModeForwards];  
  730.     [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];  
  731.     [animation setType:@"rippleEffect"];  
  732.        
  733.     [view.layer addAnimation:animation forKey:nil];  
  734. }  
  735.    
  736. + (void)animationCameraOpen:(UIView *)view  
  737. {  
  738.     CATransition *animation = [CATransition animation];  
  739.     [animation setDuration:0.35f];  
  740.     [animation setFillMode:kCAFillModeForwards];  
  741.     [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];  
  742.     [animation setType:@"cameraIrisHollowOpen"];  
  743.     [animation setSubtype:@"fromRight"];  
  744.        
  745.     [view.layer addAnimation:animation forKey:nil];  
  746. }  
  747.    
  748. + (void)animationCameraClose:(UIView *)view  
  749. {  
  750.     CATransition *animation = [CATransition animation];  
  751.     [animation setDuration:0.35f];  
  752.     [animation setFillMode:kCAFillModeForwards];  
  753.     [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];  
  754.     [animation setType:@"cameraIrisHollowClose"];  
  755.     [animation setSubtype:@"fromRight"];  
  756.        
  757.     [view.layer addAnimation:animation forKey:nil];  
  758. }  
  759. @end  
2016-06-06 14:34:00 weixin_34383618 阅读数 5
NSFileManager
判断一个给定路劲是否为文件夹

[self.fileManagerfileExistsAtPath:isDirectory:];

用于执行一般的文件系统操作 (reading and writing is done via NSData, et. al.).
主要功能包括:从一个文件中读取数据;向一个文件中写入数据;删除文件;复制文件;移动文件;比较两个文件的内容;测试文件的存在性;读取/更改文件的属性... ... 
Just alloc/init an instance and start performing operations. Thread safe.

  • 常见的NSFileManager处理文件的方法如下:
NSFileManager *fileManager = [[NSFileManager alloc]init]; //最好不要用defaultManager。 
NSData *myData = [fileManager contentsAtPath:path]; // 从一个文件中读取数据 
[fileManager createFileAtPath:path contents:myData attributes:dict];//向一个文件中写入数据,属性字典允许你制定要创建 
[fileManager removeItemAtPath:path error:err]; 
[fileManager moveItemAtPath:path toPath:path2 error:err]; 
[fileManager copyItemAtPath:path toPath:path2 error:err]; 
[fileManager contentsEqualAtPath:path andPath:path2]; 
[fileManager fileExistsAtPath:path]; ... ...
  • 常见的NSFileManager处理目录的方法如下:
[fileManager currentDirectoryPath]; 
[fileManager changeCurrentDirectoryPath:path]; 
[fileManager copyItemAtPath:path toPath:path2 error:err]; 
[fileManager createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:err]; 
[fileManager fileExistsAtPath:path isDirectory:YES]; 
[fileManager enumeratorAtPath:path]; //获取目录的内容列表。一次可以枚举指定目录中的每个文件。 ... ...
Has a delegate with lots of “should” methods (to do an operation or proceed after an error).
And plenty more. Check out the documentation.

1、文件的创建

-(IBAction) CreateFile

{

//对于错误信息

NSError *error;

// 创建文件管理器

NSFileManager *fileMgr = [NSFileManager defaultManager];

//指向文件目录

NSString *documentsDirectory= [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];


//创建一个目录

[[NSFileManager defaultManager]   createDirectoryAtPath: [NSString stringWithFormat:@"%@/myFolder", NSHomeDirectory()] attributes:nil];

// File we want to create in the documents directory我们想要创建的文件将会出现在文件目录中

// Result is: /Documents/file1.txt结果为:/Documents/file1.txt

NSString *filePath= [documentsDirectory

stringByAppendingPathComponent:@"file2.txt"];

//需要写入的字符串

NSString *str= @"iPhoneDeveloper Tips\nhttp://iPhoneDevelopTips,com";

//写入文件

[str writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&error];

//显示文件目录的内容

NSLog(@"Documentsdirectory: %@",[fileMgr contentsOfDirectoryAtPath:documentsDirectory error:&error]);
}

 

 

2、对文件重命名

对一个文件重命名
想要重命名一个文件,我们需要把文件移到一个新的路径下。下面的代码创建了我们所期望的目标文件的路径,然后请求移动文件以及在移动之后显示文件目录。
//通过移动该文件对文件重命名
NSString *filePath2= [documentsDirectory
stringByAppendingPathComponent:@"file2.txt"];
//判断是否移动
if ([fileMgr moveItemAtPath:filePath toPath:filePath2 error:&error] != YES)
NSLog(@"Unable to move file: %@", [error localizedDescription]);
//显示文件目录的内容
NSLog(@"Documentsdirectory: %@",
[fileMgr contentsOfDirectoryAtPath:documentsDirectoryerror:&error]);
 

 

3、删除一个文件


为了使这个技巧完整,让我们再一起看下如何删除一个文件:
//在filePath2中判断是否删除这个文件
if ([fileMgr removeItemAtPath:filePath2 error:&error] != YES)
NSLog(@"Unable to delete file: %@", [error localizedDescription]);
//显示文件目录的内容
NSLog(@"Documentsdirectory: %@",
[fileMgr contentsOfDirectoryAtPath:documentsDirectoryerror:&error]);
一旦文件被删除了,正如你所预料的那样,文件目录就会被自动清空:

这些示例能教你的,仅仅只是文件处理上的一些皮毛。想要获得更全面、详细的讲解,你就需要掌握NSFileManager文件的知识。

 

 

4、删除目录下所有文件

//获取文件路径
- (NSString *)attchmentFolder{

NSString *document = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

NSString *path = [document stringByAppendingPathComponent:@"Attchments"];


NSFileManager *manager = [NSFileManager defaultManager];


if(![manager contentsOfDirectoryAtPath:path error:nil]){

[manager createDirectoryAtPath:path withIntermediateDirectories:NO attributes:nil error:nil];

}
return path;

}

--清除附件
BOOL result = [[NSFileManager defaultManager] removeItemAtPath:[[MOPAppDelegate instance] attchmentFolder] error:nil];

5、判断文件是否存在

NSString *filePath = [self dataFilePath];

if ([[NSFileManager defaultManager]fileExistsAtPath:filePath]) 

  //do some thing

附:

 

-(NSString *)dataFilePath

{

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentDirectory = [paths objectAtIndex:0];

return [documentDirectory stringByAppendingPathComponent:@"data.plist"];

}

 

 

常用路径工具函数
NSString * NSUserName(); 返回当前用户的登录名 
NSString * NSFullUserName(); 返回当前用户的完整用户名 
NSString * NSHomeDirectory(); 返回当前用户主目录的路径 
NSString * NSHomeDirectoryForUser(); 返回用户user的主目录 
NSString * NSTemporaryDirectory(); 返回可用于创建临时文件的路径目录 
 
常用路径工具方法
-(NSString *) pathWithComponents:components    根据components(NSArray对象)中元素构造有效路径 
-(NSArray *)pathComponents                                          析构路径,获取路径的各个部分 
-(NSString *)lastPathComponent                                       提取路径的最后一个组成部分 
-(NSString *)pathExtension                                           路径扩展名 
-(NSString *)stringByAppendingPathComponent:path                    将path添加到现有路径末尾 
-(NSString *)stringByAppendingPathExtension:ext           将拓展名添加的路径最后一个组成部分 
-(NSString *)stringByDeletingPathComponent                           删除路径的最后一个部分 
-(NSString *)stringByDeletingPathExtension                           删除路径的最后一个部分 的扩展名 
-(NSString *)stringByExpandingTildeInPath          将路径中的代字符扩展成用户主目录(~)或指定用户主目录(~user) 
-(NSString *)stringByResolvingSymlinksInPath                         尝试解析路径中的符号链接 
-(NSString *)stringByStandardizingPath            通过尝试解析~、..、.、和符号链接来标准化路径 
使用路径NSPathUtilities.h 
tempdir = NSTemporaryDirectory(); 临时文件的目录名 
path = [fm currentDirectoryPath];
[path lastPathComponent]; 从路径中提取最后一个文件名 
fullpath = [path stringByAppendingPathComponent:fname];将文件名附加到路劲的末尾 
extenson = [fullpath pathExtension]; 路径名的文件扩展名 
homedir = NSHomeDirectory();用户的主目录 
component = [homedir pathComponents];  路径的每个部分 
 
NSProcessInfo类:允许你设置或检索正在运行的应用程序的各种类型信息
(NSProcessInfo *)processInfo                                  返回当前进程的信息
-(NSArray*)arguments                                           以NSString对象数字的形式返回当前进程的参数
-(NSDictionary *)environment                                   返回变量/值对词典。描述当前的环境变量
-(int)processIdentity                                          返回进程标识
-(NSString *)processName                                       返回进程名称
-(NSString *)globallyUniqueString   每次调用该方法都会返回不同的单值字符串,可以用这个字符串生成单值临时文件名   
-(NSString *)hostname                                          返回主机系统的名称 
-(unsigned int)operatingSystem                                 返回表示操作系统的数字 
-(NSString *)operatingSystemName                                     返回操作系统名称 
-(NSString *)operatingSystemVersionString                                     返回操作系统当前版本
-(void)setProcessName:(NSString *)name                                将当前进程名称设置为name 

============================================================================
 NSFileHandle类允许更有效地使用文件。
可以实现如下功能
1、打开一个文件,执行读、写或更新(读写)操作;
2、在文件中查找指定位置;
3、从文件中读取特定数目的字节,或将特定数目的字节写入文件中
另外,NSFileHandle类提供的方法也可以用于各种设备或套接字。一般而言,我们处理文件时都要经历以下三个步骤
1、打开文件,获取一个NSFileHandle对象(以便在后面的I/O操作中引用该文件)。
2、对打开文件执行I/O操作。
3、关闭文件。
NSFileHandle *fileHandle = [[NSFileHandle alloc]init]; 
fileHandle = [NSFileHandle fileHandleForReadingAtPath:path]; //打开一个文件准备读取
fileHandle = [NSFileHandle fileHandleForWritingAtPath:path]; 
fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:path]; 
fileData = [fileHandle availableData]; // 从设备或者通道返回可用的数据 
fileData = [fileHandle readDataToEndOfFile]; 
[fileHandle writeData:fileData]; //将NSData数据写入文件 
[fileHandle closeFile]; //关闭文件 ... ...
注:NSFileHandle类没有提供创建文件的功能,所以必须使用NSFileManager来创建文件
2016-09-03 22:36:00 weixin_33885676 阅读数 14

1名词解释

1.1. UUID

  一个字符串,在iOS上每个可执行文件或库文件都包含至少一个UUID,目的是为了唯一识别这个文件。

1.2. dwarfdump

  苹果提供的命令行工具,其中一些功能就是查看可执行文件或库文件的UUID。示例:

dwarfdump --uuid 应用名称.app/应用名称
dwarfdump --uuid 应用名称.dSYM

1.3. symbolicatecrash

  苹果提供的命令行工具,可以将crash日志符号化为可读的堆栈信息。XCode6/XCode7版本中,其路径为/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash

1.4. atosl

  苹果提供的命令行工具,可以将crash的base_address和load_address转化为可读的堆栈信息。symbolicatecrash就是使用这个命令来做符号化的。

2.如何获取Crash日志

2.1.模拟器崩溃

  模拟器/Mac应用崩溃后可以在“~/Library/Logs/DiagnosticReports/”下找到crash日志。

2.2.真机崩溃

2.2.1.Xcode获取日志

  手机和mac连接后,打开Xcode选择window进入 Devices标签栏。 如下图所示: 

 

  选择“View Device Logs”按钮,就可以看到崩溃日志: 

 

2.2.2.手动获取日志

  日志存放的路径 ~/Library/Logs/CrashReporter/MobileDevice/DEVICE_NAME,DEVICE_NAME是你想要查看的设备。 

 

3.符号化

3.1.利用Xcode符号化

  app在真机设备上Crash后,我们可以让iOS设备和mac连接,然后打开Xcode选择window进入 Devices标签栏. 在左侧的导航面板上,选中设备,单击“View Device Logs”按钮,就可以看到已经符号化完毕的日志。如图所示:

 

3.2.利用symbolicatecrash脚本符号化

  symbolicatecrash是苹果随Xcode一起提供的专门用来做崩溃日志符号化的脚本工具(perl)。

  symbolicatecrash存放路径是

/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash"

  因为symbolicatecrash可以独立使用,因此我们可以把它复制到指定的目录下,如放到根目录的bin文件夹下面,然后将相应的crash和dsym文件拷贝到该目录下,如下图所示:

 

  使用方法是:

 ./symbolicatecrash ./*.crash ./*.app.dSYM > symbol.crash
  • xx.crash:需要符号化的崩溃日志文件
  • xx.DSYM:编译APP时产生的DSYM文件,此文件可以不指定,symbolicatecrash会在硬盘内自动搜索和匹配该文件(前提是你的硬盘内存有这个文件)。

  【注意】:终端有可能会出现:Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 60,遇到该错误的时候,在终端输入如下命令:

export DEVELOPER_DIR="/Applications/XCode.app/Contents/Developer" 

  如下图所示: 

 

  生成的symbol.crash如下图所示:

 

4.崩溃日志分析

复制代码
### 1.进程信息 ###

Incident Identifier: 2F6FE1EF-0653-4CF1-A83B-27DF7D57D152
CrashReporter Key: 06a7a1ed53669f0375772f0765603cbd2d2cb414
Hardware Model: iPhone6,2
Process: newPatient [9506]
Path: /private/var/mobile/Containers/Bundle/Application/00B0A0AD-628A-4795-9654-B9E440BA6F14/newPatient.app/newPatient
Identifier: com.haodf.newPatient
Version: 10840 (3.4.1)
Code Type: ARM-64 (Native)
Parent Process: launchd [1]

### 2.基本信息 ###

Date/Time: 2016-03-16 16:59:41.41 +0800
Launch Time: 2016-03-16 16:59:39.39 +0800
OS Version: iOS 9.2.1 (13D15)
Report Version: 105

### 3.异常信息 ###

Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Triggered by Thread: 0

Filtered syslog:
None found

### 4.线程回溯 ###

Last Exception Backtrace:
0 CoreFoundation 0x180e99900 __exceptionPreprocess + 124
1 libobjc.A.dylib 0x180507f80 objc_exception_throw + 56
2 CoreFoundation 0x180d7fac4 -[__NSArrayI objectAtIndex:] + 196
3 newPatient 0x100a7970c 0x100098000 + 10360588
4 newPatient 0x101083114 0x100098000 + 16691476
5 UIKit 0x185cc1f38 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 1316
6 UIKit 0x185d80018 -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 376
7 UIKit 0x185e3cb70 _runAfterCACommitDeferredBlocks + 292
8 UIKit 0x185e4a030 _cleanUpAfterCAFlushAndRunDeferredBlocks + 92
9 UIKit 0x185b7dc24 _afterCACommitHandler + 96
10 CoreFoundation 0x180e50588 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 32
11 CoreFoundation 0x180e4e32c __CFRunLoopDoObservers + 372
12 CoreFoundation 0x180e4e75c __CFRunLoopRun + 928
13 CoreFoundation 0x180d7d680 CFRunLoopRunSpecific + 384
14 GraphicsServices 0x18228c088 GSEventRunModal + 180
15 UIKit 0x185bf4d90 UIApplicationMain + 204
16 newPatient 0x1008da544 0x100098000 + 8660292
17 libdyld.dylib 0x18091e8b8 start + 4


Global Trace Buffer (reverse chronological seconds):
1.076547 CFNetwork 0x0000000181513104 TCP Conn 0x1557dcd60 complete. fd: 14, err: 0
1.077687 CFNetwork 0x0000000181514630 TCP Conn 0x1557dcd60 event 1. err: 0
1.127049 CFNetwork 0x0000000181514708 TCP Conn 0x1557dcd60 started
1.198354 CFNetwork 0x0000000181513104 TCP Conn 0x15686f720 complete. fd: 14, err: 0
1.202190 CFNetwork 0x0000000181514630 TCP Conn 0x15686f720 event 1. err: 0
1.269881 CFNetwork 0x0000000181514708 TCP Conn 0x15686f720 started
1.329771 CFNetwork 0x0000000181513104 TCP Conn 0x1557abdc0 complete. fd: 14, err: 0
1.331608 CFNetwork 0x0000000181514630 TCP Conn 0x1557abdc0 event 1. err: 0
1.390077 CFNetwork 0x0000000181514708 TCP Conn 0x1557abdc0 started
1.390513 CFNetwork 0x0000000181513104 TCP Conn 0x1557b78e0 complete. fd: 15, err: 0
1.391615 CFNetwork 0x0000000181514630 TCP Conn 0x1557b78e0 event 1. err: 0
1.404025 CFNetwork 0x000000018147184c TCP Conn 0x15680f4b0 SSL Handshake DONE
1.438749 CFNetwork 0x000000018147175c TCP Conn 0x15680f4b0 starting SSL negotiation
1.439767 CFNetwork 0x0000000181513104 TCP Conn 0x15680f4b0 complete. fd: 17, err: 0
1.440554 CFNetwork 0x0000000181514708 TCP Conn 0x1557b78e0 started
1.440838 CFNetwork 0x0000000181514630 TCP Conn 0x15680f4b0 event 1. err: 0
1.444573 CFNetwork 0x0000000181513104 TCP Conn 0x156812200 complete. fd: 19, err: 0
1.446372 CFNetwork 0x0000000181514630 TCP Conn 0x156812200 event 1. err: 0
1.457398 CFNetwork 0x0000000181514708 TCP Conn 0x15680f4b0 started
1.458434 CFNetwork 0x0000000181514708 TCP Conn 0x156812200 started
1.483722 CFNetwork 0x000000018147184c TCP Conn 0x15680bbe0 SSL Handshake DONE
1.527764 CFNetwork 0x000000018147175c TCP Conn 0x15680bbe0 starting SSL negotiation
1.530029 CFNetwork 0x0000000181513104 TCP Conn 0x15680bbe0 complete. fd: 4, err: 0
1.532408 CFNetwork 0x0000000181514630 TCP Conn 0x15680bbe0 event 1. err: 0
1.574343 CFNetwork 0x0000000181514708 TCP Conn 0x15680bbe0 started
1.577344 CFNetwork 0x00000001815698bc Creating default cookie storage with default identifier
1.577438 CFNetwork 0x0000000181569888 Faulting in CFHTTPCookieStorage singleton
1.577438 CFNetwork 0x00000001815bb558 Faulting in NSHTTPCookieStorage singleton

 

Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x0000000180a3c140 __pthread_kill + 8
1 libsystem_pthread.dylib 0x0000000180b04ef8 pthread_kill + 112
2 libsystem_c.dylib 0x00000001809addac abort + 140
3 libc++abi.dylib 0x00000001804e13f4 __cxa_bad_cast + 0
4 libc++abi.dylib 0x00000001804fde98 default_unexpected_handler() + 0
5 libobjc.A.dylib 0x0000000180508248 _objc_terminate() + 124
6 libc++abi.dylib 0x00000001804faf44 std::__terminate(void (*)()) + 16
7 libc++abi.dylib 0x00000001804fab10 __cxa_rethrow + 144
8 libobjc.A.dylib 0x0000000180508120 objc_exception_rethrow + 44
9 CoreFoundation 0x0000000180d7d728 CFRunLoopRunSpecific + 552
10 GraphicsServices 0x000000018228c088 GSEventRunModal + 180
11 UIKit 0x0000000185bf4d90 UIApplicationMain + 204
12 newPatient 0x00000001008da544 0x100098000 + 8660292
13 libdyld.dylib 0x000000018091e8b8 start + 4

Thread 1:
0 libsystem_kernel.dylib 0x0000000180a3cb6c __workq_kernreturn + 8
1 libsystem_pthread.dylib 0x0000000180b01530 _pthread_wqthread + 1284
2 libsystem_pthread.dylib 0x0000000180b01020 start_wqthread + 4

Thread 2 name: Dispatch queue: com.apple.libdispatch-manager
Thread 2:
0 libsystem_kernel.dylib 0x0000000180a3d4fc kevent_qos + 8
1 libdispatch.dylib 0x000000018090094c _dispatch_mgr_invoke + 232
2 libdispatch.dylib 0x00000001808ef7bc _dispatch_source_invoke + 0

//省略了部分线程日志

### 5.线程状态 ###

Thread 0 crashed with ARM Thread State (64-bit):
x0: 0x0000000000000000 x1: 0x0000000000000000 x2: 0x0000000000000000 x3: 0x000000015578ece7
x4: 0x00000001804fee02 x5: 0x000000016fd674d0 x6: 0x000000000000006e x7: 0x0000000000000fa0
x8: 0x0000000008000000 x9: 0x0000000004000000 x10: 0x0000000000000002 x11: 0x0000000000000010
x12: 0x0000000000000000 x13: 0x0000000000000002 x14: 0x0000000000000000 x15: 0x0000030000000300
x16: 0x0000000000000148 x17: 0x0000000000000000 x18: 0x0000000000000000 x19: 0x0000000000000006
x20: 0x000000019e4bc000 x21: 0x000000016fd674d0 x22: 0x0000000155516bf0 x23: 0x000000019e4c7b68
x24: 0x0000000000000001 x25: 0x87001a44017766b4 x26: 0x0000000155504e80 x27: 0x0000000000000000
x28: 0x0000000000000001 fp: 0x000000016fd67430 lr: 0x0000000180b04ef8
sp: 0x000000016fd67410 pc: 0x0000000180a3c140 cpsr: 0x00000000

### 6.动态库信息 ###

Binary Images:
0x100098000 - 0x1015cbfff newPatient arm64 <9d28622234923355a849412ab7062230> /var/mobile/Containers/Bundle/Application/00B0A0AD-628A-4795-9654-B9E440BA6F14/newPatient.app/newPatient
0x1200cc000 - 0x1200fbfff dyld arm64 <9e98992ceed735e2ac4784cb28efe7c1> /usr/lib/dyld
0x180488000 - 0x180489fff libSystem.B.dylib arm64 <c4cd04b37e5f34698856a9384aefff40> /usr/lib/libSystem.B.dylib
0x18048c000 - 0x1804dffff libc++.1.dylib arm64 <d430d0ad16893b76bbc52468f65d5906> /usr/lib/libc++.1.dylib
0x1804e0000 - 0x1804fffff libc++abi.dylib arm64 <1c0a8ef87e8c37b2a577dc1a44e2b16e> /usr/lib/libc++abi.dylib
0x180500000 - 0x18086cfff libobjc.A.dylib arm64 <da8e482b3e7d3c40a798a0c86a3d6890> /usr/lib/libobjc.A.dylib
0x180870000 - 0x180874fff libcache.dylib arm64 <242f50f854a1301fa6f76b4531101238> /usr/lib/system/libcache.dylib
0x180878000 - 0x180883fff libcommonCrypto.dylib arm64 <962b6da2f76d3b22afb83adeb2b030ef> /usr/lib/system/libcommonCrypto.dylib
0x180884000 - 0x180887fff libcompiler_rt.dylib arm64 <516b8400a98f3a4fb8f82780faca4b31> /usr/lib/system/libcompiler_rt.dylib
0x180888000 - 0x18088ffff libcopyfile.dylib arm64 <c027b29d770e3a5e83aa48463916d3ed> /usr/lib/system/libcopyfile.dylib
0x180890000 - 0x1808ebfff libcorecrypto.dylib arm64 <f3daba6e74753ddc9d7a3df953621d46> /usr/lib/system/libcorecrypto.dylib

//省略了部分日志
复制代码

4.1进程信息

  这部分是闪退进程的相关信息。

  • Incident Identifier:是崩溃报告的唯一标识符。
  • CrashReporter Key:是与设备标识相对应的唯一键值。虽然它不是真正的设备标识符,但也是一个非常有用的情报:如果你看到100个崩溃日志的CrashReporter Key值都是相同的,或者只有少数几个不同的CrashReport值,说明这不是一个普遍的问题,只发生在一个或少数几个设备上。
  • Hardware Model:标识设备类型。 如果很多崩溃日志都是来自相同的设备类型,说明应用只在某特定类型的设备上有问题。上面的日志里,崩溃日志产生的设备是iPhone 5s。
  • Process: 是应用名称。中括号里面的数字是闪退时应用的进程ID。
  • Version:APP的版本号。

4.2.基本信息

  这部分给出了一些基本信息,包括闪退发生的日期和时间,设备的iOS版本。如果有很多崩溃日志都来自iOS 6.0,说明问题只发生在iOS 6.0上。

4.3.异常信息

  在这部分,你可以看到闪退发生时抛出的异常类型。还能看到异常编码和抛出异常的线程。根据崩溃报告类型的不同,在这部分你还能看到一些另外的信息。

4.4.线程回溯

  这部分提供应用中所有线程的回溯日志。 回溯是闪退发生时所有活动帧清单。它包含闪退发生时调用函数的清单。看下面这行日志:

2   CoreFoundation                 0x34648e88 0x83000  + 224

  这条调用栈包括下面四部分:

  • 帧编号—— 此处是2。
  • 二进制库的名称 ——此处是 CoreFoundation.
  • 调用方法的地址 ——此处是 0x34648e88.
  • 第四列分为两个子列,一个基本地址和一个偏移量。此处是0x83000 + 8740, 第一个数字指向文件,第二个数字指向文件中的代码行。

4.5.线程状态

  这部分是闪退时寄存器中的值。一般不需要这部分的信息,因为回溯部分的信息已经足够让你找出问题所在。

4.6.动态库信息

  这些信息包括动态库名称、UUID、模块起始地址、模块结束地址、指令集种类、安装路径等信息。

  这些信息都是在符号化堆栈用到的。

5其他

5.1友盟统计

5.1.1.友盟Crash文件

复制代码
*** -[__NSArrayI objectAtIndex:]: index 3 beyond bounds [0 .. 2]

(null)

(

 0   CoreFoundation                      0x00000001853142f4 &lt;redacted&gt; + 160

 1   libobjc.A.dylib                     0x0000000196f900e4 objc_exception_throw + 60

 2   CoreFoundation                      0x00000001851f7b34 CFRunLoopRemoveTimer + 0

 3   ?????????                           0x000000010005e9c4 ????????? + 338372

 4   UIKit                               0x0000000189dff124 &lt;redacted&gt; + 404

 5   UIKit                               0x000000018a0167e8 &lt;redacted&gt; + 2376

 6   UIKit                               0x000000018a01919c &lt;redacted&gt; + 1504

 7   UIKit                               0x000000018a01770c &lt;redacted&gt; + 184

 8   FrontBoardServices                  0x000000018db513c8 &lt;redacted&gt; + 32

 9   CoreFoundation                      0x00000001852cc27c &lt;redacted&gt; + 20

 10  CoreFoundation                      0x00000001852cb384 &lt;redacted&gt; + 312

 11  CoreFoundation                      0x00000001852c99a8 &lt;redacted&gt; + 1756

 12  CoreFoundation                      0x00000001851f52d4 CFRunLoopRunSpecific + 396

 13  UIKit                               0x0000000189df83d0 &lt;redacted&gt; + 552

 14  UIKit                               0x0000000189df2f40 UIApplicationMain + 1488

 15  ?????????                           0x00000001000cbb14 ????????? + 785172

 16  libdyld.dylib                       0x000000019763aa08 &lt;redacted&gt; + 4

)

 
dSYM UUID: 5FFF54D6-71B5-37F5-AB11-4D7111E27BE2

CPU Type: arm64

Slide Address: 0x0000000100000000

Binary Image: ???

Base Address: 0x000000010000c000
复制代码

5.1.2.错误分析

  方法一:从友盟下载错误分析工具,按如下步骤操作:

  • 第一步 下载错误分析工具 并解压zip得到umcrashtool文件,可将umcrashtool与已下载的xxx.csv文件放入同一目录下。
  • 第二步 在terminal中运行umcrashtool命令,参数为错误分析的.csv文件绝对路径,如下:
./umcrashtool //Users/GofLee/crash/zhaibuzhu.csv

  方法二:使用dSYM协助分析(我一般用这个),操作很简单,截图如下:

5.2Crashlytics

5.3听云

5.4云测

5.5腾讯Bugly

2017-11-29 15:01:10 ZQ_timor 阅读数 120

今天无意间发现自己的uitableview的自定义xib cell并没有像自己想象一样的被复用。这是怎么回事呢!代码如下:

NSString *identifer = @"PostedTextCell";
        cell = [tableView dequeueReusableCellWithIdentifier:identifer];
        if (!cell) {
            cell = [[[NSBundle mainBundle] loadNibNamed:identifer owner:self options:nil] lastObject];
                  }

这应该是对的吧。重用cell的方法都是这样写的啊!怎么回事呢??

原来是这样 在Xib的设置里,我们这里loadNibNamed:Name    ,的确能正常的初始化cell。但是

[tableView dequeueReusableCellWithIdentifier:identifer];
这句话是根据xib里面的identifer来的。问题就出现在我没有在Xib里面设置identifer,所以不能从缓存池里面拿出相应的cell


IOS 上传头像-b

阅读数 17

没有更多推荐了,返回首页