Swift 2.0, Xcode 7 issue - swift2

I was using RAMAnimatedTabBarController Module from here:
https://github.com/Ramotion/animated-tab-bar
I developed my entire application in swift 1.2 using Xcode 6 and the app was running perfectly . I wanted to try out "side loading" of my app using Xcode 7 which has swift 2.0. I had too many errors and I managed to solve most of the errors but three.
1) This line of code which is from that RAMAnimatedTabBarController module is throwing an error saying the function can't be evoked, when this perfectly compiled in Xcode 6:
var constranints = NSLayoutConstraint.constraintsWithVisualFormat(formatString,options:NSLayoutFormatOptions.DirectionRightToLeft,metrics: nil,views: containersDict as [NSObject : AnyObject])
the compiler error for this was:
Cannot invoke 'constraintsWithVisualFormat' with an argument list of
type '(String, options: NSLayoutFormatOptions, metrics: nil, views:
[NSObject : AnyObject])'
2) Another unusual error was thrown:
linker command failed with exit code 1 (use -v to see invocation)
3) And another:
(null): error: cannot parse the debug map for
"/Users/Rakshith/Library/Developer/Xcode/DerivedData/Blubot-heabwwmhqxxvctaabxkwcpgzsadx/Build/Intermediates/SwiftMigration/Blubot/Products/Debug-iphonesimulator/BlubotTests.xctest/BlubotTests":
No such file or directory
What is actually wrong with my project? It is still set to iOS 8.3.

Disable BitCode
Build Settings -> BitCode

I managed to correct the 2nd and 3rd error which most of you probably will face when you're running Xcode 7 Beta as well as Xcode 6.
Just solve these two errors by following the steps mentioned in this tread:
Xcode Version 6.1 (6A1030) - Apple Match O-Linker Error - Building

Try this method:
func createViewContainers() -> [String: UIView] {
var containersDict = [String: UIView]()
guard let tabBarItems = tabBar.items else
{
return containersDict
}
let itemsCount: Int = tabBarItems.count - 1
for index in 0...itemsCount {
let viewContainer = createViewContainer()
containersDict["container\(index)"] = viewContainer
}
var formatString = "H:|-(0)-[container0]"
for index in 1...itemsCount {
formatString += "-(0)-[container\(index)(==container0)]"
}
formatString += "-(0)-|"
let constranints = NSLayoutConstraint.constraintsWithVisualFormat(formatString,
options:NSLayoutFormatOptions.DirectionRightToLeft,
metrics: nil,
views: containersDict)
view.addConstraints(constranints)
return containersDict
}

how about to change the small code from "containersDict as [NSObject : AnyObject]" to "containersDict as [String : AnyObject]".
then I solved the issue above method.

Related

ld verification of load/store fails when using LTO but not much info is provided

After updating to Xcode 10 our C++ codebase does not link when built with -Os and -flto. The following error is provided:
ld: Explicit load/store type does not match pointee type of pointer operand (Producer: 'APPLE_1_1000.11.45.2_0' Reader: 'LLVM APPLE_1_1000.11.45.2_0') for architecture x86_64
(the same error occurs on the latest Xcode 10.1 Beta 3)
The same code builds fine with Xcode 9. Sadly the linker does not provide any more info than spitting out the above error message. Some info about the object file would be helpful in trying to pinpoint the exact source of the problem. Removing -flto eliminates the error…
Does anyone have any debugging suggestions/ideas? We've tried to use "--trace" with ld to get more info on the files being processed but the error message just gets outputted in the middle of the trace with no apparent correlation between the error and the input file being printed at that moment.
This all smells very much of a compiler error and I've reported this to Apple via the bug tracker.
Any extra help would be greatly appreciated. Thanks
In my case turning any optimization -O1,2,3 spit out this error (while -flto was off)
I tracked it to the following issue.
I made a class Algo_three - so that I can return 3 values from a function:
#interface Algo_three<T,V,W> : NSObject{
#public
T p_0;
V p_1;
W p_2;
}
+ (Algo_three<T,V,W>*) first:(T) f second:(V) s third:(W) t;
#end
And I used it as follows (in .m file)
+(Algo_three<NSManagedObjectContext*,NSManagedObjectContext*,NSError*>*) CreateCDContexts: ....
{
return [Algo_three first:ui_managedObjectContext second:sync_managedObjectContext third:nil];
}
Receiving 3 values - this was good as well..
Algo_three<NSManagedObjectContext*,NSManagedObjectContext*,NSError*> * two_contexts = [not_important_class CreateCDContexts: ... ];
//and here is accessing
self->ui_context = (NSManagedObjectContext*) two_contexts->p_0; //getting 1st value
self->sync_context = (NSManagedObjectContext*) two_contexts->p_1; //2nd value
Commenting out last two lines removed the error!
So I added three accessor properties to class Algo_three and it worked.
Algo_three class lookes like this (.h).
#interface Algo_three<T,V,W> : NSObject{
#public
T p_0;
V p_1;
W p_2;
}
#property (strong,nonatomic) T first;
#property (strong,nonatomic) V second;
#property (strong,nonatomic) W third;
+ (Algo_three<T,V,W>*) first:(T) f second:(V) s third:(W) t;
#end
Implementation of those properties (.m):
- (id) first{
return p_0;
}
-(void) setFirst:(id) obj{
self->p_0 = obj;
}
- (id) second{
return p_1;
}
-(void) setSecond:(id) obj{
self->p_1 = obj;
}
- (id) third{
return p_2;
}
-(void) setThird:(id) obj{
self->p_2 = obj;
}
and instead of ->p_0 accessing is done via properties .first, .second
self->ui_context = (NSManagedObjectContext*) two_contexts.first;
self->sync_context = (NSManagedObjectContext*) two_contexts.second;
Lastly I admit - that compiler told me what file the error was located in, albeit not so clearly.
XCode 10.1 (10B61). I scrutinised the file that was just before the compiler error - I confirmed it by running archive from command line :
xcodebuild -scheme MY_PROJ archive

In Xcode 8 (Swift 3) what does UnsafeMutablePointer<_> mean?

The following code:
var mutableDataP = UnsafeMutablePointer<Int16>(audioBuffer.mData)
let stereoSampleArray = UnsafeMutableBufferPointer(
start: mutableDataP,
count: nBytesInBuffer/sizeof(Int16) // Int16 audio samples
)
gives the following error:
Cannot convert value of type 'UnsafeMutablePointer' to expected
argument type 'UnsafeMutablePointer<_>'
What is an UnsafeMutablePointer<__> and how do I cast to it? I tried all the casting variations I could think of and got un-understandable diagnostics for each and I've run out of ideas. I find the documentation on the various UnsafeMutablePointer types unhelpful, and no mention at all of '<_>'.
Try this change:
let stereoSampleArray = withUnsafeMutablePointer(to: &audioBuffer.mData){
return UnsafeMutableBufferPointer(
start: $0,
count: nBytesInBuffer/MemoryLayout<Int16>.size // Int16 audio samples
)
}
Where audioBuffer.mData is a var

Xcode beta 7 - Do-While loop SWIFT Error

The following code gives the error
Expected 'while' in 'do-while' loop
if let path = NSBundle.mainBundle().pathForResource("Chapters", ofType: "txt"){
do {
let stringFromFile = try String(contentsOfFile:path, encoding: NSUTF8StringEncoding)
var chapters: [String] = stringFromFile.componentsSeparatedByString("#")
chapters.removeAtIndex(0)
} catch {
print((error))
}
}
it was working fine before, but now it's giving me an error. Does anyone know why?
That code works for me as-is in the Playground with the appropriate Chapters.txt file in the Resources folder; XCode 7.1 Build 7B60. Did you try Shift-Command-K for a Clean Build?
Something does not seem right with your error message. With Swift 2.0, there are no more do-while loops. They have been replaced by repeat-while loops instead. As your code snippet shows, do has been repurposed for do-try-catch error handling.

Recursion and Xcode 7 compile error

this is a simple recursion function
func recursion(parameter : Double)
{
if parameter < 12
{
recursion(parameter + 1)
}
print(parameter)
}
when i am trying to put a simple value for example 0 or 1
recursion(0)
i get a compile error saying Missing argument for #1 in call any idea why this is happening?
btw if i change the function to
func recursion(parameter : Double)
{
if parameter > 1
{
recursion(parameter - 1)
}
print(parameter)
}
everything works fine
any ideas? i am using Xcode 7 beta
Your code works fine, just make a Clean & Build and then try it again and the initial compile error should disappear. Remember that Xcode 7 is still in Beta, Apple is working to fix this kind of false compile errors properly.
I hope this help you.

Compilation error in Release in Xcode 7 beta 5 in Swift code

I have the following code.
class MyClass {
private var callbacks: [()->()] = []
func doIt(callback: (()->())?) {
if let callback = callback {
callbacks.append(callback)
}
// ... other code here
}
}
When I build the project in Release it shows the following error:
Command failed due to signal: Abort trap: 6
Assertion failed: (PAI2->use_empty() && "Should not have any uses"), function foldInverseReabstractionThunks, file /Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-700.0.52.2/src/swift/lib/SILPasses/SILCombinerVisitors.cpp, line 549.
While running SILFunctionTransform "SIL Combine" on SILFunction "#TFC11AddCallback7MyClass4doItfS0_FGSqFT_T__T".
Note that the error appears only in Release and only in Xcode 7 beta 5. The code worked in Xcode 7 beta 4.
Demo: https://github.com/exchangegroup/add-callback-demo-ios
Looks like a bug in Swift? Submitted a bug report to Apple.
Update
The issue has been resolved in Xcode 7.0 beta 6 (7A192o).
I was having this same problem (beta 5 only).
It was where I was trying to append a closure to an array of closures, it looks to be the same for yours where you have an addCallback method in your MyClass class.
As silly as it is, I got mine to build on release from changing this code:
callbacks.append(newCallback)
to this
callbacks = callbacks + [newCallback]

Resources