Conditional Compilation not succeeding swift - ios

I have two targets in my project TargetA and TargetB
TargetA bridging header file TargetA-Bridging-Header.h
#import "Class1.h"
#import "Class2.h"
#import "Class3.h"
TargetB bridging header file TargetB-Bridging-Header.h
#import "Class4.h"
#import "Class5.h"
#import "Class6.h"
There is one class of swift that is used in both Targets with name "MyCombinedTargetsClass.swift"
It has the following code
#if TARGETA
Class2.instance().someMethod()
#endif
Now the problem is if I compile TargetA then it succeeds but If I compile TargetB it gives me error "unresolved identifier Class2" though the code is written under macro of TargetA #if TARGETA

Related

Objective-c class exposed via bridging header not visible from swift when archiving release

In my react native project, I try to expose a swift function to the javascript code. It works well in debug mode, but when trying to archiving I get a Use of undeclared type RCTEventEmitter error on my swift file.
The RCTEventEmitter is imported in my RNUtils.m file, and in the bridging header.
So I guess somewhere in the archiving, something fail with the bridging header, but I have no idea where.
If I ask for a non existing import, it will tell me that it can't compile the bridging header, so the file is taken into account during the build.
// Utils.m
#import "React/RCTBridgeModule.h"
#import "React/RCTConvert.h"
#import "React/RCTEventEmitter.h"
#interface RCT_EXTERN_REMAP_MODULE(RNUtils, RNUtils, RCTEventEmitter)
#end
// Utils.swift
import Foundation
#objc(RNUtils)
class RNUtils: RCTEventEmitter {
// my native code emitting events
}
// MyApp-Bridging-header.h
#ifndef MyApp_Bridging_Header_h
#define MyApp_Bridging_Header_h
#import <React/RCTBridgeModule.h>
#import <React/RCTEventEmitter.h>
#endif
react-native 0.61.5
xcode 11.5
Swift 5
It appears I needed to add ìmport React` in every swift file. It's archiving fine now.

How to fix the Xcode path error

In the AFNetworking's sample code, I use several folders to classify the source codes.
And the Xcode reports:
/Users/.../Framework/AFNetworking.h:19:9: 'AFNetworking/AFURLRequestSerialization.h' file not found
/Users/.../AFNetworking-master/Example/Classes/Networking Extensions/AFAppDotNetAPIClient.h:4:9: While building module 'AFNetworking' imported from /Users/dengjiangzhou/Documents/源码/2_AFNetworking/AFNetworking-master/Example/Classes/Networking Extensions/AFAppDotNetAPIClient.h:4:
/Users/.../AFNetworking-master/Example/:1:9: In file included from :1:
And
Here is the code:
In the AFNetworking.h file
#import <Foundation/Foundation.h>
//! Project version number for AFNetworking.
FOUNDATION_EXPORT double AFNetworkingVersionNumber;
//! Project version string for AFNetworking.
FOUNDATION_EXPORT const unsigned char AFNetworkingVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <AFNetworking/PublicHeader.h>
#import <Availability.h>
#import <TargetConditionals.h>
#ifndef _AFNETWORKING_
#define _AFNETWORKING_
#import <AFNetworking/AFURLRequestSerialization.h>
#import <AFNetworking/AFURLResponseSerialization.h>
#import <AFNetworking/AFSecurityPolicy.h>
#if !TARGET_OS_WATCH
#import <AFNetworking/AFNetworkReachabilityManager.h>
#endif
#import <AFNetworking/AFURLSessionManager.h>
#import <AFNetworking/AFHTTPSessionManager.h>
Error occurs in the last line.
And I didn't change any code. I just organized the files to check the functions of each module easily.
Maybe insert a file name in the search path of Xcode build settings, is quite OK.
I have not figured it out.
Many Thanks in advance.
You should remove AFNetworking/ from import line and use
#import ""
instead of
#import <>
Go to Build Phases -> Open Headers section -> Move files from Project to Public.
Try this:
Select AFURLRequestSerialization.m
Go to the right tab in the Xcode. Find Target Membership. Uncheck and check again all the boxes.
Product > Clean
Hold Alt and perform: Product > Clean Build Folder...
Build again.

Importing ObjC files into Swift

I want to import files from this library, I copied and pasted the following .h and .m files from the ObjC library into my Swift project:
AppDelegate.h AppDelegate.m
ViewController.h ViewController.m
SPUserResizableView.h SPUserResizableView.m
Upon copying and pasting these files into my project, Xcode asked me to create a bridging header file, I then put the following lines into that bridging header file:
#import "ViewController.h"
#import "SPUserResizableView.h"
#import "AppDelegate.h"
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
I tried to build my project, but build failed. I got many unknown type errors and such, which I assume is because the system is not recognizing the ObjC code. I also got this line of error:
failed to emit precompiled header '....../Project-Bridging-Header-swift_24D19ORYKRN0-clang_1KQCLSEAC5RDY.pch' for bridging header '......./Project-Bridging-Header.h'
How do I resolve these errors? What else do I need to do to use the Objective C library in my swift code?
Why you import AppDelegate.h and other
just use this class (SPUserResizableView.h SPUserResizableView.m)
and in Bridge file
^ #import "SPUserResizableView"
in your BridgingHeader just add
#import "SPUserResizableView.h"
dont copy other projects AppDelegate and ViewController. just copy SPUserResizeableView.h and .m file

Importing AFNetworking without pod

I want to add AFNetworking without pod and source code to my project. I started by adding source code and then following libraries.
Then I added prefix file
#import <Availability.h>
#if __IPHONE_OS_VERSION_MIN_REQUIRED
#ifndef __IPHONE_6_0
#warning "This project uses features only available in iPhone SDK 6.0 and later."
#endif
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <SystemConfiguration/SystemConfiguration.h>
#import <MobileCoreServices/MobileCoreServices.h>
#endif
#else
#ifdef __OBJC__
#import <Cocoa/Cocoa.h>
#import <SystemConfiguration/SystemConfiguration.h>
#import <AssertMacros.h>
#import <CoreServices/CoreServices.h>
#endif
#endif
And add prefix file to Build Settings -> Apple LLVM 6.1 - Language -> Prefix Header.
After that I built project and I got following errors:
Implicit declaration of function 'SecItemExport' is invalid in C99
Use of undeclared identifier 'kSecFormatUnknown' Use of undeclared
identifier 'kSecItemPemArmour'
Which all are in a file and line. AFSecurity Policy.m, line 31. Which is:
__Require_noErr_Quiet(SecItemExport(key, kSecFormatUnknown, kSecItemPemArmour, NULL, &data), _out);
When I comment this line of code, which is not correct, the rest of project is built completely.
What should I do and why those errors happened?
I found the answer on github.
As mentioned in the release notes for 2.6, if you are installing the library manually you will need to define the following variables in your project's pch:
#ifndef TARGET_OS_IOS
#define TARGET_OS_IOS TARGET_OS_IPHONE
#endif
#ifndef TARGET_OS_WATCH
#define TARGET_OS_WATCH 0
#endif
Github Link.
My solution is to add "TARGET_OS_IOS=1" at Preprocessor Macros -- Build Settings

Chartboost and swift integration

Ok, this is the first time I am trying to integrate chartboost and swift, so I will start from the beginning, maybe I missed something. First I have imported chartboost framework into my project, and then manually created the .h file, which I named BridgingHeader.h I added the needed import statements so that file looks like that now:
#ifndef appname_BridgingHeader_h
#define appname_BridgingHeader_h
#import <Chartboost/Chartboost.h>
#import <Chartboost/CBNewsfeed.h>
#import <CommonCrypto/CommonDigest.h>
#import <AdSupport/AdSupport.h>
#import <UIKit/UIKit.h>
#endif
I tried to build, everything went fine, but I noticed that it does not actually import this file. Hence I went to my project build settings, located Swift Compiler - Code Generation and found Objective-C Bridging Header and named it as appname/BridgingHeader.h . Now I am sure it did find the file and tried to import chartboost files, because I got 56 errors, of which all are in the chartboost files. Erros are such as "function definition is not allowed here" or "expected a type". The last error says that it failed to import bridging header. Anyone knows or has any ideas how to make this work?
Thanks
Ok, I my problem.
1) UIKit import should be done as follows:
#import <UIKit/UIKit.h>
#ifndef appname_BridgingHeader_h
#define appname_BridgingHeader_h
#import <Chartboost/Chartboost.h>
#import <Chartboost/CBNewsfeed.h>
#import <CommonCrypto/CommonDigest.h>
#import <AdSupport/AdSupport.h>
#endif
2) for the path, I should just went to the bridging file, in the file inspector copy the full path and paste it in the Swift Compiler - Code Generation.

Resources