When I submit an iOS app with armadillo, the BLAS symbols are rejected as private (ITMS-90338: Non-public API usage)

james_alvarez

I have an app which uses the armadillo library to do some matrix calculations. It compiles fine against the Accelerate.framework, but is rejected at the app store:

ITMS-90338: Non-public API usage - The app references non-public symbols...ddot, dgemm, dgemv, dsyrk.

These symbols are from the BLAS library and are included in Accelerate, but are apparently not public. Is there a way to use armadillo without getting this error?

james_alvarez

For iOS, one problem that arises when you submit the app store is you will get a rejection unless you tell the armadillo library to NOT use BLAS.

You might also get the same for any of these symbols:

_sasum_ _dasum_ _snrm2_ _dnrm2_ _sdot_ _ddot_ 
_sgemv_ _dgemv_ _cgemv_ _zgemv_ _sgemm_ _dgemm_ 
_cgemm_ _zgemm_ _ssyrk_ _dsyrk_ _cherk_ _zherk_

These are all used by BLAS for doing faster matrix calculation, but are in fact not necessary for basic functionality. To turn off BLAS go to the armadillo_bits/config.hpp wherever you are linking to armadillo and comment out line 26:

#if !defined(ARMA_USE_BLAS)
//#define ARMA_USE_BLAS
//// Comment out the above line if you don't have BLAS or a high-speed replacement for BLAS,
//// such as OpenBLAS, GotoBLAS, Intel MKL, AMD ACML, or the Accelerate framework.
//// BLAS is used for matrix multiplication.
//// Without BLAS, matrix multiplication will still work, but might be slower.
#endif

This will now mean you can use armadillo without BLAS and the app store will not reject the binary. If you WANT to use BLAS, you could have a look in wrapper_blas.h and def_blas.h and do some replacement with the provided public API (eg. https://developer.apple.com/documentation/accelerate/1513282-cblas_dgemm?language=objc) - but this was not necessary for my project and I didn't have time to check if it would all work (and I have to admit I have more interesting free time projects...)

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

ITMS-90338: Non-public API usage

ITMS-90338: Non-public API usage PROCESSING ERROR - Previously Working

ITMS-90338 gomobile _ptrace rejected by App Store

iOS App Rejected : non-public APIs

Non-public API usage: The app references non-public symbols: __XCTFailureFormat, __XCTFailureHandler

When an API goes public, can an app still get rejected for using it?

Problem when publishing an application on the App Store [Non-public API usage]

Capacitor iOS app receiving ITMS-90809: Deprecated API Usage rejection?

How to switch iOS Private app to Public App

Apple rejected my app because of non-public APIs springboard

Various ITMS errors when trying to submit archive to App Store

Non-public API usage : The app contains one or more corrupted binaries

Archive Submissions Failure - The app references non-public symbols (WatchKit)

iOS HERE SDK NMAKit private API usage

Issue with watchOS app when submit iOS app

Errors ITMS-90530 and ITMS-90502 when I upload my app to the store

My app rejected because uses the "prefs:root=" non-public URL scheme

I dont understand that why Apple rejected my ios app Screenshots?

I get conflicting provisioning settings error when I try to archive to submit an iOS app

ITMS-90809: Deprecated API Usage - existing app that use UIWebView are no longer accepted

Using xamarin forms, still getting warning for UIWebView deprecation in app store "ITMS-90809: Deprecated API Usage"

what is the iOS api to get statistics on app usage?

Can I submit Swift 2.2 app with Xcode 7.3 when iOS 10 is released?

iPhone app rejected due to battery usage and heat

Will searching for a subview with a private API class name be rejected?

How do I create a private and public API architecture

private/public Field is not seen in inspector when I use GridLayoutGroup in unity

When should I use public, private, or [SerializeField]? Unity C#

The app references non-public selector in id (Facebook SDK iOS)