iOS Submission Rejected, Call Kit features / API

OoiKengSiangOoiKengSiang MYMember ✭✭
edited December 2017 in Visual Studio

Tried to submit my app to iTunes build using Visual Studio for Mac (version 7.3.2), iOS native (not Xamarin.Form).
App got rejected with the following message:

Where can the user find the Call Kit features within your app. If you do not intend to use the Call Kit API in your app, please remove it and re-upload your app for review.

I know there is another post talking about similar issue, but the solution doesn't help my case since I have configure the linker to "Link Framework SDKs Only".
Yes, I rebuild the same app twice using this setting and got rejected with the same message.

Then I use otool to check my app package and realize there are a bunch of frameworks / APIs still remain in the app, here are the list:

    /System/Library/Frameworks/Security.framework/Security (compatibility version 1.0.0, current version 58286.32.2)
    /System/Library/Frameworks/AVFoundation.framework/AVFoundation (compatibility version 1.0.0, current version 2.0.0)
    /System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 3698.33.6)
    /System/Library/Frameworks/WebKit.framework/WebKit (compatibility version 1.0.0, current version 604.4.7)
    /System/Library/Frameworks/HomeKit.framework/HomeKit (compatibility version 1.0.0, current version 475.2.40)
    /System/Library/Frameworks/AVKit.framework/AVKit (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/PassKit.framework/PassKit (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/CoreBluetooth.framework/CoreBluetooth (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/CoreSpotlight.framework/CoreSpotlight (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/MediaPlayer.framework/MediaPlayer (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0, current version 1450.14.0)
    /System/Library/Frameworks/CoreVideo.framework/CoreVideo (compatibility version 1.2.0, current version 1.5.0)
    /System/Library/Frameworks/MessageUI.framework/MessageUI (compatibility version 1.0.0, current version 3445.5.17)
    /System/Library/Frameworks/SceneKit.framework/SceneKit (compatibility version 1.0.0, current version 432.3.0)
    /System/Library/Frameworks/Metal.framework/Metal (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/GameKit.framework/GameKit (compatibility version 1.0.0, current version 559.3.0)
    /System/Library/Frameworks/EventKit.framework/EventKit (compatibility version 1.0.0, current version 100.0.0)
    /System/Library/Frameworks/SpriteKit.framework/SpriteKit (compatibility version 1.0.0, current version 2.0.0)
    /System/Library/Frameworks/AddressBook.framework/AddressBook (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/AddressBookUI.framework/AddressBookUI (compatibility version 1.0.0, current version 33.0.0)
    /System/Library/Frameworks/iAd.framework/iAd (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/CloudKit.framework/CloudKit (compatibility version 1.0.0, current version 735.0.0)
    /System/Library/Frameworks/EventKitUI.framework/EventKitUI (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/Contacts.framework/Contacts (compatibility version 0.0.0, current version 0.0.0)
    /System/Library/Frameworks/ExternalAccessory.framework/ExternalAccessory (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/QuartzCore.framework/QuartzCore (compatibility version 1.2.0, current version 1.11.0)
    /System/Library/Frameworks/CoreGraphics.framework/CoreGraphics (compatibility version 64.0.0, current version 1129.2.1)
    /System/Library/Frameworks/CoreLocation.framework/CoreLocation (compatibility version 1.0.0, current version 2237.0.22)
    /System/Library/Frameworks/PhotosUI.framework/PhotosUI (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/PushKit.framework/PushKit (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/QuickLook.framework/QuickLook (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/ReplayKit.framework/ReplayKit (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/ContactsUI.framework/ContactsUI (compatibility version 1.0.0, current version 33.0.0)
    /System/Library/Frameworks/SafariServices.framework/SafariServices (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/MapKit.framework/MapKit (compatibility version 1.0.0, current version 14.0.0)
    /System/Library/Frameworks/CoreMedia.framework/CoreMedia (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/OpenGLES.framework/OpenGLES (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/MultipeerConnectivity.framework/MultipeerConnectivity (compatibility version 1.0.0, current version 150.0.0)
    /System/Library/Frameworks/NetworkExtension.framework/NetworkExtension (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/SystemConfiguration.framework/SystemConfiguration (compatibility version 1.0.0, current version 963.30.1)
    /System/Library/Frameworks/WatchConnectivity.framework/WatchConnectivity (compatibility version 1.0.0, current version 159.0.0)
    /System/Library/Frameworks/MetalKit.framework/MetalKit (compatibility version 1.0.0, current version 98.3.0)
    /System/Library/Frameworks/CoreData.framework/CoreData (compatibility version 1.0.0, current version 849.2.0)
    /System/Library/Frameworks/GameplayKit.framework/GameplayKit (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/GLKit.framework/GLKit (compatibility version 1.0.0, current version 92.0.0)
    /System/Library/Frameworks/StoreKit.framework/StoreKit (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/CallKit.framework/CallKit (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/IOSurface.framework/IOSurface (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/VideoSubscriberAccount.framework/VideoSubscriberAccount (compatibility version 1.0.0, current version 238.1.0)
    /System/Library/Frameworks/Intents.framework/Intents (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/Speech.framework/Speech (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/UserNotifications.framework/UserNotifications (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (compatibility version 150.0.0, current version 1450.14.0)
    /System/Library/Frameworks/CFNetwork.framework/CFNetwork (compatibility version 1.0.0, current version 893.14.0)
    /usr/lib/libsqlite3.dylib (compatibility version 9.0.0, current version 274.6.0)
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.1)
    /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.11)
    /usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.0.0)
    /System/Library/Frameworks/CoreTelephony.framework/CoreTelephony (compatibility version 1.0.0, current version 0.0.0)
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)

Anyone have any idea how I can resolve this? I tried "Link All", the result is similar, unused framework still shown when listed using otool.

Thanks.

Edit #1
I have make sure the linker setting is passed to the back-end. Here are a part of the output file:

    MtouchArch                     = ARMv7, ARM64
    MtouchDebug                    = False
    MtouchEnableBitcode            = False
    MtouchEnableGenericValueTypeSharing = True
    MtouchEnableSGenConc           = False
    MtouchExtraArgs                = 
    MtouchFastDev                  = False
    MtouchFloat32                  = False
    MtouchHttpClientHandler        = HttpClientHandler
    MtouchLink                     = SdkOnly
    MtouchLinkerDumpDependencies   = False
    MtouchNoSymbolStrip            = False
    MtouchProfiling                = False
    MtouchProjectDirectory         = /Volumes/BOOTCAMP/Shared/Projects/Bugko/Source/Bugko/Bugko.XIOS
    MtouchTargetsEnabled           = true
    MtouchUseLlvm                  = true
    MtouchUseThumb                 = False
    MtouchVerbosity                = 4

Edit #2
I have run the same build with linker off and compare with linker set to SDK only. Then run otool. They show exactly the same list.

Best Answer

  • OoiKengSiangOoiKengSiang MY ✭✭
    Accepted Answer

    After painstakingly tearing up the whole project and put back together one package by one package. The problem is caused by ReactiveUI.Events nuget package (current version 7.4.0), including the package won't cause any problem, but once any extension API is called, linker will skip all iOS framework.
    For example

    NewButton.Events().Clicked
        .Subscribe(_ => DoSomething());
    

    Skip this nuget and replace all events extension api with observable event pattern will solve the issue.
    For example

    Observable.FromEventPattern<EventHandler, EventArgs>(
        ev => NewButton.Clicked += ev,
        ev => NewButton.Clicked -= ev
        ).Subscribe(_ => DoSomething());
    

Answers

  • OoiKengSiangOoiKengSiang MYMember ✭✭
    Accepted Answer

    After painstakingly tearing up the whole project and put back together one package by one package. The problem is caused by ReactiveUI.Events nuget package (current version 7.4.0), including the package won't cause any problem, but once any extension API is called, linker will skip all iOS framework.
    For example

    NewButton.Events().Clicked
        .Subscribe(_ => DoSomething());
    

    Skip this nuget and replace all events extension api with observable event pattern will solve the issue.
    For example

    Observable.FromEventPattern<EventHandler, EventArgs>(
        ev => NewButton.Clicked += ev,
        ev => NewButton.Clicked -= ev
        ).Subscribe(_ => DoSomething());
    
Sign In or Register to comment.