The way I look at it is that Swift wants all symbols resolved when linking.
C++ is probably very lenient toward full resolution, and as long as you know 
that a certain unresolved reference is not used, you can safely ignore the 
warning.
Or maybe the C++ compiler is just very clever and can figure out that the 
reference is never used?

Regards,
Rien

Site: http://balancingrock.nl
Blog: http://swiftrien.blogspot.com
Github: http://github.com/Balancingrock
Project: http://swiftfire.nl





> On 06 Mar 2017, at 18:09, Jakub Bednář <jakub.bed...@avast.com> wrote:
> 
> Hi Rien,
> 
> looks like a good way around my problem.
> 
> Still I wonder why this does not work in Swift as it does work in Objective-C 
> or even in strongly typed checked C++.
> 
> Maybe it is some kind of Swift’s security measure to avoid hard-to-debug bugs 
> in C++ caused by virtual table inconsistencies.
> 
> Anyway, thanks for the help.
> 
> J.
> 
> 
>> On Mar 6, 2017, at 6:01 PM, Rien <r...@balancingrock.nl> wrote:
>> 
>> Well, that was a bit short…
>> 
>> When you want to use logging, define the ACC “USE_LOGGING” in the build 
>> settings.
>> When you don’t want to use logging, don’t define the ACC.
>> 
>> PS: You can get my logging framework from github: 
>> https://github.com/Balancingrock/SwifterLog
>> 
>> Regards,
>> Rien
>> 
>> Site: http://balancingrock.nl
>> Blog: http://swiftrien.blogspot.com
>> Github: http://github.com/Balancingrock
>> Project: http://swiftfire.nl
>> 
>> 
>> 
>> 
>> 
>>> On 06 Mar 2017, at 17:58, Rien <r...@balancingrock.nl> wrote:
>>> 
>>> You need conditional compilation.
>>> 
>>> Called “Active Compilation Conditions” in the build settings.
>>> 
>>> For example define a ACC of “USE_LOGGING”
>>> 
>>> Then in your code:
>>> 
>>> #if USE_LOGGING
>>> 
>>> import Logging
>>> 
>>> #else
>>> 
>>> struct Logging {
>>>     func debug(message: string) {}
>>> }
>>> 
>>> #endif
>>> 
>>> 
>>> 
>>> 
>>> Regards,
>>> Rien
>>> 
>>> Site: http://balancingrock.nl
>>> Blog: http://swiftrien.blogspot.com
>>> Github: http://github.com/Balancingrock
>>> Project: http://swiftfire.nl
>>> 
>>> 
>>> 
>>> 
>>> 
>>>> On 06 Mar 2017, at 17:26, Jakub Bednář via swift-users 
>>>> <swift-users@swift.org> wrote:
>>>> 
>>>> Hello everyone,
>>>> 
>>>> I am trying to add optional logging into my framework, but for sake of 
>>>> this question, lets assume I want to add optional logging into an app. I 
>>>> have created an example with following setup:
>>>> 
>>>> 1. Logging.framework declares
>>>> 
>>>>    public protocol Logging {
>>>>            func debug(message: String)
>>>>    }
>>>> 
>>>>    and I have build the framework for the app to see it.
>>>> 
>>>> 2. Application has 
>>>> 
>>>>    import Logging
>>>>    
>>>>    public class Engine {
>>>> 
>>>>            let logger: Logging?
>>>> 
>>>>            public init(withLogger logger: Logging? = nil) {
>>>>                    self.logger = logger 
>>>>            }
>>>> 
>>>>            public work() {
>>>>                    self.logger?.debug(“Working”)
>>>>            }
>>>>    } 
>>>> 
>>>> Now I don’t have the Logging.framework in Embed Binaries nor Link 
>>>> Frameworks lists. My app builds ok, but then fails to start telling me 
>>>> that Logging.framework was not loaded. I checked the binary using otool -L 
>>>> and Logging.framework is still referenced by the binary. Is there any way 
>>>> how to achieve my goal? This would be trivial with Objective-C and I still 
>>>> can’t figure it out in Swift.
>>>> 
>>>> Thanks a lot,
>>>> 
>>>> J.
>>>> 
>>>> _______________________________________________
>>>> swift-users mailing list
>>>> swift-users@swift.org
>>>> https://lists.swift.org/mailman/listinfo/swift-users
>>> 
>> 
> 

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to