编码问题导致svn生成patch或者提交失败

问题描述
用SmartSVN生成Patch时提示 svn: File has inconsistent newlines

问题分析
提交的文件编码时混合了windows和unix符号

问题解决
对提交的文件运行命令:
svn propdel svn:eol-style target.file

又找到一种方法,但是没有试过:
在SmartSVN中,点击Project–>Setting,选择Working copy下的EOL-style,将Default EOL-style设置为 As is(no conversion),并点击ok按钮

view-source Protocol

在浏览器地址栏中输入view-source:url,可以查看url页面的源代码。

view-source协议在IE和Safari的高版本中的支持被移除了,支持的浏览器见下。

Browser Supported?
Mozilla Firefox supported
Mozilla SeaMonkey supported
Netscape supported
Internet Explorer 45 and 6 supported
Internet Explorer 67, and 8 not supported after Windows XP SP2
Safari 3.2.1 supported[citation needed]
Safari 5, 6 not supported
Opera 7, 8, 9, 10, 11 not supported
Opera 15 and up supported
Google Chrome supported[7]
Web supported[citation needed]
HP webOS supported in-browser via a homebrew app called Internalz Pro[8]

CGColorSpaceRelease多次调用引起的问题

问题描述:在多次运行图片Blur处理后,报如下错误:

Assertion failed: (!space->is_singleton), function color_space_dealloc, file ColorSpaces/color-space.c, line 100.

问题分析:Blur的代码如下:

- (UIImage *)blurryWithLevel:(CGFloat)level

{

if (level < 0.f || level > 1.f) {

level = 0.5f;

}

int boxSize = (int)(level * 100);

boxSize = boxSize - (boxSize % 2) + 1;

 

CGImageRef img = self.CGImage;

 

vImage_Buffer inBuffer, outBuffer;

vImage_Error error;

 

void *pixelBuffer;

 

CGDataProviderRef inProvider = CGImageGetDataProvider(img);

CFDataRef inBitmapData = CGDataProviderCopyData(inProvider);

 

inBuffer.width = CGImageGetWidth(img);

inBuffer.height = CGImageGetHeight(img);

inBuffer.rowBytes = CGImageGetBytesPerRow(img);

 

inBuffer.data = (void*)CFDataGetBytePtr(inBitmapData);

 

pixelBuffer = malloc(CGImageGetBytesPerRow(img) *

CGImageGetHeight(img));

 

if(pixelBuffer == NULL)

NSLog(@"No pixelbuffer");

 

outBuffer.data = pixelBuffer;

outBuffer.width = CGImageGetWidth(img);

outBuffer.height = CGImageGetHeight(img);

outBuffer.rowBytes = CGImageGetBytesPerRow(img);

 

error = vImageBoxConvolve_ARGB8888(&inBuffer,

&outBuffer,

NULL,

0,

0,

boxSize,

boxSize,

NULL,

kvImageEdgeExtend);

 

 

if (error) {

NSLog(@"error from convolution %ld", error);

}

 

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

CGContextRef ctx = CGBitmapContextCreate(

outBuffer.data,

outBuffer.width,

outBuffer.height,

8,

outBuffer.rowBytes,

colorSpace,

(CGBitmapInfo)kCGImageAlphaNoneSkipLast);

CGImageRef imageRef = CGBitmapContextCreateImage (ctx);

UIImage *returnImage = [UIImage imageWithCGImage:imageRef];

 

CGContextRelease(ctx);

CGColorSpaceRelease(colorSpace);

 

free(pixelBuffer);

CFRelease(inBitmapData);

 

CGColorSpaceRelease(colorSpace);//此句多Release了
CGImageRelease(imageRef);

 

return returnImage;

}

问题解决:CGColorSpaceRelease多Release导致的。删除如上注释这句:CGColorSpaceRelease(colorSpace);

UIVisualEffectView不支持iPad2和iPhone4S以及以下机型

问题描述:在Extension中增加Blur浮层,显示的Blur效果为透明灰色。代码如下:

UIImage *image=[UIImage imageNamed:@"Grass.jpg"];
UIImageView *imageView=[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 300, 300)];
imageView.image=image;
[self.view addSubview:imageView];

UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
UIVisualEffectView *bluredEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
[bluredEffectView setFrame:[imageView bounds]];
[self.view addSubview:bluredEffectView];

问题解决:查了下资料,UIVisualEffectView对iPad2和iPhone4S以及以下机型不支持。用第三方的FXBlurView也是得到用默认tintColor填充的色块。模糊功能需要硬件加速,早期的设备不支持。

Framework的@rpath问题

问题描述:最新的Xcode6开放了动态库支持,可以使Container和Extension共享一个Framework。最新开发通讯MC模块,也来试试看。单独运行Container,但是运行Extension时,报如下错误:

dyld: Library not loaded: @rpath/BIIPC.framework/BIIPC
Referenced from: /private/var/mobile/Containers/Bundle/Application/1548B083-7E48-4497-A8E3-0E65842F2EF4/BIIPCDemo.app/PlugIns/BIIPCKeyboard.appex/BIIPCKeyboard
Reason: image not found

问题分析:看报错信息,应该是没有找到Framework,要么是没有拷入BIIPCKeyboard目录,要么是运行目录环境参数没有设置到位。首先把Extension的Target中手动导入Framework,编译报错,提示有2个一样签名(动态库是需要签名)的资源。应该就是@rpath没有设置对。

问题解决:在Extension-Target-Building Settings中把Run path Search Paths增加一个路径:@executable_path/../../Frameworks

Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or snapshot after screen updates.

问题描述:自定义主题拍照预览出现黑屏。一次正常一次黑屏一次正常一次黑屏,黑屏时重拍后能正常预览。预览黑屏时控制台输入Log如下:

Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or snapshot after screen updates.

问题分析:iPhone5S有问题,iPad2没问题。看了iPhone5S中系统的拍照也是有同样问题,判断为系统bug。

官方UIImagePickerController的例子,自己实现拍照按钮,在iPhone5S上正常。
https://developer.apple.com/LIBRARY/IOS/samplecode/PhotoPicker/Listings/PhotoPicker_APLViewController_m.html#//apple_ref/doc/uid/DTS40010196-PhotoPicker_APLViewController_m-DontLinkElementID_6

这是一个老外写的UIImagePickerController的例子,简单使用,在iPhone5S上黑屏。
https://github.com/bartvandeweerdt/CameraTest

看了黑屏时,View的层级,有一个黑色的CAMBlurredSnapshotView覆盖在上面。手动把其removeFromSuperView,预览只有一帧,并不会更新。

问题解决:此bug为系统bug。从iOS8.0到iOS8.1都有,苹果并没有修复。并不是每台都有这个问题,但是一旦有这个问题,就会一直存在,除非重装系统。

现在的解决办法只有参考官方例子自己实现拍照按钮。

 

PS:系统都为iOS8.1

A valid provisioning profile for this executable was not found.

问题描述:昨天设备突然出现不能安装调试,Xcode出现如下错误:

A valid provisioning profile for this executable was not found.

问题分析:重启Xode、重启iPad无果。

看下设备log,如下:

Dec 17 14:41:36 zhonglixunde-iPad kernel[0] <Notice>: flow_divert_token_set (0): Failed to get the key unit from the token: 22
Dec 17 14:41:36 zhonglixunde-iPad lockdownd[24] <Error>: Could not set socket option SO_OPPORTUNISTIC: Invalid argument
Dec 17 14:41:36 zhonglixunde-iPad misagent[222] <Error>: attempt to install invalid profile: 0xe8008011

以为是连接问题,所有换了根线,还是报错。

问题解决:最后iPad“还原所有设置”,搞定。

 

PS:iPad2 iOS8.1,Xcode  6.1

UIImagePickerController横竖屏问题

问题描述:皮肤商店-自定义主题中有个拍照功能,iOS 8.1下旋转后需要歪脖子观看。

问题分析:UIImagePickerController在iOS 8.0中,不会随设备旋转。同事手动旋转来修复了这个bug。
8.1中,Apple修复了以上的这个bug。但是手动代码还是执行了,导致到了一次旋转。

问题解决:对8.0做特殊化处理:只有在8.0中采用手动旋转

hidesBottomBarWhenPushed 黑影bug

问题描述:
在storyboard中勾选UIViewController的Hide Bottom Bar On Push属性,或者设置UIViewController的hidesBottomBarWhenPushed为YES。然后进行UINavigationController的push操作。切换ViewController时,导航栏右边会出现黑色类似阴影的东西。
问题分析:
此为iOS的bug,只能绕开hidesBottomBarWhenPushed。
问题解决:
可以通过在代码中控制UITabBarController的tabBar的hidden属性来隐藏bottom bar。
在需要隐藏的ViewController的ViewWillAppear中,将其设置为YES;在需要显示的VewController的ViewWillAppear中,将其设置为NO.

PS: under iOS8, Xcode beta6 GM

iOS8 Extension中横竖屏Notification问题

问题描述:输入法Extension中使用Notification监听UIApplicationDidChangeStatusBarOrientationNotification,发现userInfo中返回转屏前方向

问题分析:使用self.interfaceOrientation发现同样返回的是转屏前方向。查了下文档,发现:

UIApplicationWillChangeStatusBarOrientationNotification
Posted when the app is about to change the orientation of its interface.

UIApplicationDidChangeStatusBarOrientationNotification
Posted when the orientation of the app’s user interface changes.

问题解决:替换为UIApplicationWillChangeStatusBarOrientationNotification监听事件,返回正常

PS:Xcode6 beta5, iOS8 ,Keyboard Extension