我正在尝试从此项目https://github.com/Eclair/CircleProgressBar创建à绑定库。
我使用sharpie生成ApiDefinition.cs和.a文件。
> sharpie pod init ios CircleProgressBar
> sharpie bind
我在项目中复制了.a文件,并将生成的c#代码放在我的ApiDefinition.cs文件中。 但是生成的代码无法编译。
我认为问题在于,这些行
typedef NSString*(^StringGenerationBlock)(CGFloat progress);
typedef NSAttributedString*(^AttributedStringGenerationBlock)(CGFloat progress);
转换为这些
delegate string StringGenerationBlock (nfloat arg0);
delegate NSAttributedString AttributedStringGenerationBlock (nfloat arg0);
但编译器建议用IntPtr替换字符串,即使我这样做,即使编译项目,如果我尝试实例化CircleProgressBar,我的应用程序也会崩溃
答案 0 :(得分:0)
将导致错误的string
更改为NSString
(不 IntPtr):
// typedef NSString * (^StringGenerationBlock)(CGFloat);
delegate NSString StringGenerationBlock (nfloat arg0);
现在,解决方案中的绑定项目应该编译没有错误。
在实际设备上进行调试/测试
默认sharpie pod XXXXX
不将创建一个可在iOS模拟器中运行的静态库,它也不允许创建 fat </ strong>库,你必须手动完成。
iphonesimulator
的静态库:为此,您需要手动构建xcode项目,并将sdk
设置为iphonesimulator
。
即
xcodebuild -project Pods.xcodeproj -target Pods -sdk iphonesimulator -configuration Debug clean build
您可以将该输出与原始.a
一起使用来创建胖lib。
if (circleProgressBar == null) {
circleProgressBar = new CircleProgressBar ();
circleProgressBar.Frame = new CoreGraphics.CGRect (this.View.Frame.Width / 4, this.View.Frame.Width / 4, this.View.Frame.Width / 2, this.View.Frame.Width / 2);
circleProgressBar.ProgressBarWidth = 33.0f;
circleProgressBar.BackgroundColor = UIColor.Clear;
circleProgressBar.ProgressBarProgressColor = UIColor.Green;
circleProgressBar.ProgressBarTrackColor = UIColor.Red;
circleProgressBar.StartAngle = 0.0f;
circleProgressBar.SetProgress (0.0f, false);
this.Add (circleProgressBar);
} else {
circleProgressBar.SetProgress (circleProgressBar.Progress + 0.1f, true);
}