Xamarin Object Sharpie Obj-C Library Binding why Output huge File?

731 views Asked by At

I'm trying to bind the Heatmap part of Google Maps iOS utils now.

https://github.com/googlemaps/google-maps-ios-utils

1: .a file Create

2: CreateMakefile & Execute the make command

XBUILD=/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild
PROJECT_ROOT=./GoogleMapiOSHeatmapUtility
PROJECT=./GoogleMapiOSHeatmapUtility.xcodeproj
TARGET=GoogleMapiOSHeatmapUtility

all: lib$(TARGET).a

lib$(TARGET)-i386.a:
        $(XBUILD) -project $(PROJECT) -target $(TARGET) -sdk iphonesimulator -configuration Release clean build
        -mv ./build/Release-iphonesimulator/lib$(TARGET).a $@

lib$(TARGET)-armv7.a:
        $(XBUILD) -project $(PROJECT) -target $(TARGET) -sdk iphoneos -arch armv7 -configuration Release clean build
        -mv ./build/Release-iphoneos/lib$(TARGET).a $@

lib$(TARGET)-arm64.a:
        $(XBUILD) -project $(PROJECT) -target $(TARGET) -sdk iphoneos -arch arm64 -configuration Release clean build
        -mv ./build/Release-iphoneos/lib$(TARGET).a $@

lib$(TARGET).a: lib$(TARGET)-i386.a lib$(TARGET)-armv7.a lib$(TARGET)-arm64.a
        xcrun -sdk iphoneos lipo -create -output $@ $^

clean:
        -rm -f *.a *.dll

3: add 「.a」File BindingProject

4: create ApiDefinitions & StructsAndEnums Files

Execute command

sharpie bind --output=GoogleMapiOSHeatmapUtility --namespace=GoogleMapiOSHeatmapUtility --sdk=iphoneos11.1  ./GoogleMapiOSHeatmapUtility/*.h

Result

Parsing 14 header files...
In file included from /var/folders/kv/_n7jh8kd1cbd0sl1jy75k_cm0000gn/T/tmpcc4d148.h:6:
/Users/xxxxxxxx/Documents/repository/GoogleMapiOSHeatmapUtility/GoogleMapiOSHeatmapUtility/GMUHeatmapTileLayer.h:45:1: warning: no 'assign', 'retain', or 'copy' attribute is specified - 'assign' is assumed
      [-Wobjc-property-no-attribute]
@property(nonatomic) GMUGradient *gradient;
^
/Users/xxxxxxxxxxx/Documents/repository/GoogleMapiOSHeatmapUtility/GoogleMapiOSHeatmapUtility/GMUHeatmapTileLayer.h:45:1: warning: default property attribute 'assign' not appropriate for non-GC object
      [-Wobjc-property-no-attribute]

Binding...
  [write] ApiDefinitions.cs
  [write] StructsAndEnums.cs

Binding Analysis:
  Automated binding is complete, but there are a few APIs which have been flagged with [Verify] attributes. While the entire binding should be audited for best API design practices, look more closely at APIs
  with the following Verify attribute hints:

  ConstantsInterfaceAssociation (205 instances):
    There's no foolproof way to determine with which Objective-C interface an extern variable declaration may be associated. Instances of these are bound as [Field] properties in a partial interface into a
    nearby concrete interface to produce a more intuitive API, possibly eliminating the 'Constants' interface altogether.

  MethodToProperty (201 instances):
    An Objective-C method was bound as a C# property due to convention such as taking no parameters and returning a value (non-void return). Often methods like these should be bound as properties to surface a
    nicer API, but sometimes false-positives can occur and the binding should actually be a method.

  StronglyTypedNSArray (45 instances):
    A native NSArray* was bound as NSObject[]. It might be possible to more strongly type the array in the binding based on expectations set through API documentation (e.g. comments in the header file) or by
    examining the array contents through testing. For example, an NSArray* containing only NSNumber* instances can be bound as NSNumber[] instead of NSObject[].

  PlatformInvoke (3177 instances):
    In general P/Invoke bindings are not as correct or complete as Objective-C bindings (at least currently). You may need to fix up the library name (it defaults to '__Internal') and return/parameter types
    manually to conform to C calling conventionsfor the target platform. You may find you don't even want to expose the C API in your binding, but if you do, you'll probably also want to relocate the
    definition to a more appropriate class and expose a stronger type-safe wrapper. For P/Invoke guidance, see http://www.mono-project.com/docs/advanced/pinvoke/.

  InferredFromMemberPrefix (30 instances):
    The name of this originally anonymous declaration was taken from a common prefix of its members.

  Once you have verified a Verify attribute, you should remove it from the binding source code. The presence of Verify attributes intentionally cause build failures.

  For more information about the Verify attribute hints above, consult the Objective Sharpie documentation by running 'sharpie docs' or visiting the following URL:

    http://xmn.io/sharpie-docs
2 warnings generated.

Done.

After executing the sharpie bind command, ApiDefinitions.cs and StructsAndEnums.cs are generated, but both files have code of more than 20,000 lines and more than 3000 errors have occurred

Why will a huge file be created when 14 header files are used and none satisfy 100 lines?

I have just started Xamarin and I am struggling quite a bit here There is a reason why heat maps must be used absolutely.

Please help me

1

There are 1 answers

1
ColeX On BEST ANSWER

Why will a huge file be created when 14 header files are used and none satisfy 100 lines?

It seems like this issue comes with the latest Sharpie(I made binding library before and it was working fine).

Only part of the huge file is useful(at the end of the file), you can delete the useless code.

Moreover, I suggest you create it via CocoaPods if this project has registered in it.